PHP Mysqli multi_query和trigger的分隔符

时间:2013-06-26 11:02:36

标签: php mysql phpmyadmin delimiter mysqli-multi-query

我需要在PHP中运行db创建脚本。 使用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行插入“test”后创建TRIGGER tr_insert_test

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

1 个答案:

答案 0 :(得分: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);