我有很大的问题(对我而言)
我需要从PHP执行MySQL命令DELIMITER |
,但mysql_query()
失败并出现错误。我发现mysql_query()
不支持使用DELIMITER
,因为此命令仅适用于MySQL控制台
但是当我打开phpMyAdmin时,有一个选项可以在SQL选项卡上更改DELIMITER并且它可以工作,但我不知道如何。
是否可以从PHP更改分隔符?在调用使用多个CREATE TRIGGER
的{{1}}命令之前,我需要它。
答案 0 :(得分:11)
您可能不需要更改分隔符。
CLI中需要分隔符来告知SQL语句的结束位置,因为CLI将继续读取并执行更多语句,直到您告诉它停止为止(例如,使用exit
或Control-D) 。但它实际上读的只是一串人物;它以某种方式需要弄清楚一个语句的结束和下一个语句的开始。这就是分隔符的作用。
在PHP中,每个函数调用都执行一个语句。一个函数调用中不能有多个语句,因此不需要一种方法来分隔它们。该语句是整个字符串。旧的mysql_query
以及较新的mysqli_query
和PDO都是如此。当然,如果您真的想将多个查询传递给一个函数,则会有mysqli_multi_query
。
对于存储过程/触发器/函数/等,可以有多个语句,但这些语句由MySQL本身处理(并且始终为;
,AFAIK)。因此,就PHP而言,这仍然是一个声明。
您在phpMyAdmin中看到的分隔符设置可能用于拆分语句,可能是在PHP代码中完成的。它必须这样做,因为它接受由多个语句组成的用户输入,但每个函数调用只能传递一个语句。 (我没有检查phpMyAdmin代码以完全确定这一点。)
答案 1 :(得分:1)
这取决于。我使用MySQLi的multi_query()
函数并在执行过程创建时保留;
,实际完成(PHP 5.6和MySQL 5.6)。我认为你不需要护理分隔符,只留下目标代码然后才可能工作。
您可能只尝试将SQL查询为
CREATE XXXX
BEGIN
sth;
END
试一试。
答案 2 :(得分:0)
基本上,它表示您应该可以使用mysqli
和multi_query
。
答案 3 :(得分:-1)
您需要一个存储的例程(过程,函数)来包含所有必要的查询,
所以在PHP中,你可以优雅地调用存储的例程