2

我需要在 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 ;; 附近使用正确的语法 tr_insert_test在第 1 行插入“测试”后创建触发器

如果我在 phpmyadmin 中尝试相同的脚本,它可以工作......你能告诉我为什么吗?谢谢

4

1 回答 1

1

由于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);
于 2013-06-26T11:16:53.337 回答