php - 如何执行mysql命令DELIMITER

标签 php mysql

我有很大的问题(对我来说)

我需要从 PHP 执行 MySQL 命令 DELIMITER |,但 mysql_query() 失败并出现错误。我发现mysql_query()不支持DELIMITER的使用,因为这个命令只在MySQL控制台有效

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

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

最佳答案

您可能不需要需要更改分隔符。

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

在 PHP 中,每个函数调用都执行一条语句。一个函数调用中不能有多个语句,因此不需要一种方法来分隔它们。该语句是整个字符串。旧的 mysql_query 以及较新的 mysqli_query 和 PDO 都是如此。当然,如果你真的想将多个查询传递给一个函数,还有 mysqli_multi_query

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

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

关于php - 如何执行mysql命令DELIMITER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5311141/

相关文章:

mysql - 启动 MySQL 时出现错误 "Plugin ' InnoDB 注册为存储引擎失败”

mysql - 选择按两列分组的计数

php - 启动 WAMP 后,mysqld.exe 立即使用大量内存(450 MB)

java - Android 以及如何处理用户数据库

mysql - SQL查询显示今天、上周和上个月创建的记录

php - Cakephp3 case mysql 语句没有创建正确的查询

php - Xpath 代码在 firepath 中有效,但在 php 脚本中无效

php - 使用 AJAX 执行 SQL 查询并在成功执行后重定向

php - - 突然出现而不是子弹

php - Laravel - 通过频繁更新缓存 Eloquent