我需要在 PHP 中运行数据库创建脚本。 使用 multi_query 我发现触发器定界符有一些问题:
$sql="
CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT);
DELIMITER ;;
CREATE TRIGGER `tr_insert_test` AFTER INSERT ON `test` FOR EACH ROW BEGIN UPDATE log SET dirty = 1 WHERE data = DATE(NEW.emissione); END;;
DELIMITER ;";
$mysqli->multi_query($sql);
有了这个我得到:
您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 'DELIMITER ;; 附近使用的正确语法。在第 1 行插入“测试”后创建触发器 tr_insert_test
如果我在 phpmyadmin 中尝试相同的脚本,它会起作用...你能告诉我为什么吗? 谢谢
最佳答案
由于 multi_query
(afaik) 不处理自定义分隔符,最简单的方法可能是将其拆分为两个完全不需要分隔符的单独的常规查询;
<?php
$mysqli = new mysqli('localhost', 'test', '', 'test');
$sql = "CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, emissione INT)";
$mysqli->query($sql);
$sql = "
CREATE TRIGGER `tr_insert_test` AFTER INSERT ON `test`
FOR EACH ROW BEGIN
UPDATE log SET dirty = 1 WHERE data = DATE(NEW.emissione);
END
";
$mysqli->query($sql);
关于PHP Mysqli multi_query 和触发器的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17318305/