Php 如何执行mysql命令分隔符

Php 如何执行mysql命令分隔符,php,mysql,Php,Mysql,我有个大问题(对我来说) 我需要从PHP执行MySQL命令DELIMITER,但是MySQL\u query()失败并出现错误。我发现mysql\u query()不支持使用DELIMITER,因为这个命令只在mysql控制台中工作 但当我打开phpMyAdmin时,在SQL选项卡上有一个更改分隔符的选项,它可以工作,但我不知道如何工作 是否可以从PHP更改分隔符?在调用使用多个的CREATE TRIGGER命令之前,我需要这样做您可能不需要更改分隔符 CLI中需要分隔符来指示SQL语句的结束位

我有个大问题(对我来说)

我需要从PHP执行MySQL命令
DELIMITER
,但是
MySQL\u query()
失败并出现错误。我发现
mysql\u query()
不支持使用
DELIMITER
,因为这个命令只在mysql控制台中工作

但当我打开phpMyAdmin时,在SQL选项卡上有一个更改分隔符的选项,它可以工作,但我不知道如何工作

是否可以从PHP更改分隔符?在调用使用多个
CREATE TRIGGER
命令之前,我需要这样做

您可能不需要更改分隔符

CLI中需要分隔符来指示SQL语句的结束位置,因为CLI将继续读取和执行更多语句,直到您告诉它停止(例如,使用
exit
或Control-D)。但它实际读取的只是一个字符流;它需要弄清楚一条语句在哪里结束,下一条语句在哪里开始。这就是分隔符的作用

在PHP中,每个函数调用执行一条语句。一个函数调用中不能有多个语句,因此不需要对它们进行分隔。语句是整个字符串。旧的
mysql\u查询
以及新的
mysqli\u查询
和PDO都是如此。当然,如果您真的想将多个查询传递给一个函数,那么就有
mysqli\u multi\u query

在存储过程/触发器/函数等的情况下,可以有多个语句,但这是由MySQL本身处理的(并且总是
,AFAIK)。就PHP而言,这仍然是一条语句

您在phpMyAdmin中看到的分隔符设置可能用于将语句分开,并且可能是在PHP代码中完成的。它必须这样做,因为它接受由多个语句组成的用户输入,但每个函数调用只能传递一个语句。(我还没有检查phpMyAdmin代码来完全确定这一点)。

您需要一个存储例程(过程、函数)来包含所有必要的查询,

因此,在PHP中,您可以根据需要优雅地调用存储的例程。我使用MySQLi的
multi_query()
函数并离开
创建过程时的原样,实际完成(PHP5.6和MySQL 5.6)。我想你不需要在意分隔符,只留下目标代码就可以了。
您可以尝试仅在以下情况下查询SQL:

CREATE XXXX
BEGIN
    sth;
END

试一试。

你应该在www.stackoverflow.com上问这个问题,更不用说能够插入分隔符会带来灾难性的后果…@Capsule:嗯,在正确编码的应用程序中不会这样做,但是是的。这会使一些SQL注入漏洞攻击更加糟糕。因为“正确编码的应用程序”在这里不是事实,所以我更愿意提及;-)OP在Create触发器语句中使用分隔符。这与我无关CLI@YarekTOP询问在使用CLI时需要更改
创建触发器之前的分隔符。OP用于CLI,这就是它与CLI的关系。