简体   繁体   English

PHP Mysqli multi_query和触发器的定界符

[英]PHP Mysqli multi_query and trigger's delimiter

I need to run a db creation script inside PHP. 我需要在PHP中运行数据库创建脚本。 Using multi_query I find some trouble with trigger delimiter: 使用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);

With this I get: You have an error in your SQL syntax; 这样我得到: 您的SQL语法有错误; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER ;; 检查与您的MySQL服务器版本相对应的手册,以在'DELIMITER附近使用正确的语法; CREATE TRIGGER tr_insert_test AFTER INSERT ON `test' at line 1 在第1行的`test'上插入TRIGGER tr_insert_test之后

If I try the same script inside phpmyadmin it works... can you tell me why? 如果我在phpmyadmin中尝试相同的脚本,它将起作用...您能告诉我为什么吗? Thanks 谢谢

Since multi_query (afaik) does not handle custom delimiters, the simplest way is probably splitting it into two separate, normal queries which do not need delimiters at all; 由于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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM