执行 2 个以分号分隔的查询时出现语法错误

Gia*_*ino 3 mysql mariadb

在 Ubuntu 22 上将 MySQL 升级到 MariaDB 10.6.11 后,当我运行在 PHP 项目中使用的相同查询时,出现语法错误。经过一些测试,看起来用分号分隔的多个查询无法再执行。我尝试过像这样更简单的查询

$sql = "SET @var1 = 1; SET @var2 = 2;"
Run Code Online (Sandbox Code Playgroud)

我仍然得到

PDOException: SQLSTATE[42000]: 语法错误或访问冲突: 1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行“SET @var2 = 2”附近使用的正确语法

奇怪的是,只有通过 PHP 我才会收到此错误;如果我在 PhpMyAdmin SQL 选项卡中尝试此操作,它会起作用。DELIMITER 是分号“;”。任何想法?

Bil*_*win 5

默认情况下,大多数 MySQL 和 MariaDB 客户端接口不支持多查询。每次调用只能运行一个 SQL 语句query()

永远不需要启用多重查询。这样做没有任何好处可以证明复杂性是合理的。

对于分配变量的SET语句,您可以在单个 SQL 语句中分配多个变量,如下所示:

$sql = "SET @var1 = 1, @var2 = 2"
Run Code Online (Sandbox Code Playgroud)

即使在您认为需要在一次调用中运行多个 SQL 语句的其他情况下query(),您几乎肯定不需要这样做。一次只运行一个语句。

此外,该DELIMITER命令根本不是可以通过 PDO 等客户端接口执行的语句。这是一个mysql命令行内置命令。这些内置命令只能被mysql客户端识别,不能被 MySQL Server SQL 解析器识别。

仅当通过客户端或支持SQL脚本输入的GUI客户端DELIMITER运行SQL脚本时,才需要设置。mysql由于编程接口仅支持每次调用一个 SQL 语句query(),因此无需更改分隔符,因为例程主体内的分号明确不会终止该语句。