You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL脚本执行报错:两条SET语句为何触发语法错误?

问题原因及解决建议

核心原因

你的问题大概率是PHP数据库扩展默认禁用了多语句查询功能。当你把两条SET语句用分号拼接成一个字符串执行时,扩展会将整个内容当作单条SQL语句解析,到第二条SET @natureTime:=1时就会判定为语法错误。而MySQL客户端本身支持多语句执行,所以直接在客户端跑没问题。

解决建议

  • 拆分语句执行:把两条SET命令分开,分两次调用PHP的数据库执行方法,每次执行一条语句:
    // PDO示例
    $pdo->exec("SET @natureRegTime:=7200;");
    $pdo->exec("SET @natureTime:=1;");
    
  • 开启多语句支持(谨慎使用):如果必须合并执行,可在初始化数据库连接时开启多语句支持,但要注意这会增加SQL注入风险,务必确保所有输入都经过严格过滤:
    • PDO示例:
      $options = [
          PDO::MYSQL_ATTR_MULTI_STATEMENTS => true,
          // 其他连接选项
      ];
      $pdo = new PDO($dsn, $username, $password, $options);
      
    • mysqli示例:使用mysqli_multi_query()替代普通query(),但同样要注意注入风险。
  • 检查扩展配置:确认PHP的数据库扩展(如pdo_mysql、mysqli)是否有相关配置限制,比如是否强制禁用了多语句执行。

内容的提问来源于stack exchange,提问作者John Perczyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:38:10