PHP Mysqli multi_query 和触发器的分隔符

标签 php mysql phpmyadmin delimiter mysqli-multi-query

我需要在 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/

相关文章:

mysql - 应用程序刷新后,Extjs Store 显示零记录

javascript - 使用 javascript 调用 php 函数

mysql 如何按日和月查询数据库表并生成总计

mysql比较两个表找出不匹配的记录

MySQL 抛出错误 1064,似乎无法识别 OVER 命令

php - 计算每个成员名称在具有条件的表中出现的次数

mysql - 启用 MySQL 性能监视器

php mysql从日期字段中查找早于一天的行

php - 用户墙 PHP 和 MYSQL

javascript - 发布在 angularjs 中没有按预期工作