升级至MariaDB 10.6.11后PHP执行多语句SQL报错求助
解决PHP执行MariaDB多语句查询报错的思路
原因
PHP的PDO扩展默认关闭了多语句查询支持(multi_statements选项默认禁用),这是为防范SQL注入设置的安全机制。而PhpMyAdmin会自动拆分多语句逐个执行,所以能正常运行。
解决办法
开启PDO多语句支持
初始化PDO连接时,添加PDO::MYSQL_ATTR_MULTI_STATEMENTS => true配置项,示例代码:$dsn = 'mysql:host=localhost;dbname=你的数据库名;charset=utf8mb4'; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_MULTI_STATEMENTS => true ]; $pdo = new PDO($dsn, '用户名', '密码', $options);注意:开启后必须严格校验所有用户输入,避免SQL注入风险。
拆分语句单独执行
把原多语句拆分成单个查询分别执行,这种方式无需修改PDO配置,安全性更高,优先推荐,示例:$pdo->exec("SET @var1 = 1;"); $pdo->exec("SET @var2 = 2;");检查MariaDB配置(可选)
执行SELECT @@sql_mode;查看当前SQL模式,确认没有限制多语句的参数。若有异常,可修改/etc/mysql/my.cnf(或对应配置文件)中的sql_mode项,重启MariaDB服务生效。
内容的提问来源于stack exchange,提问作者Giacomo Scarpino
相关产品推荐
相关产品推荐

