如何执行mysql命令DELIMITER

时间:2011-03-15 07:11:35

标签: php mysql

我有很大的问题(对我而言)

我需要从PHP执行MySQL命令DELIMITER |,但mysql_query()失败并出现错误。我发现mysql_query()不支持使用DELIMITER,因为此命令仅适用于MySQL控制台

但是当我打开phpMyAdmin时,有一个选项可以在SQL选项卡上更改DELIMITER并且它可以工作,但我不知道如何。

是否可以从PHP更改分隔符?在调用使用多个CREATE TRIGGER的{​​{1}}命令之前,我需要它。

4 个答案:

答案 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)

this mysql forumpost help吗?

基本上,它表示您应该可以使用mysqlimulti_query

答案 3 :(得分:-1)

您需要一个存储的例程(过程,函数)来包含所有必要的查询,
所以在PHP中,你可以优雅地调用存储的例程