php循环执行multi_query时,提示Commands out of sync; you can't run this command now

multi_query

执行一个 SQL 或者 多个使用分号分隔的 SQL 语句。
要获得执行结果中的第一个结果集,请使用 mysqli_use_result() 或 mysqli_store_result() 函数。
要读取后续的结果集, 请使用 mysqli_more_results() 和 mysqli_next_result() 函数。

如果第一个 SQL 语句就失败了,返回 FALSE。 如果是批量执行 SQL 语句, 必须首先调用 mysqli_next_result() 函数,才可以获取后续语句的错误信息。
如果第一个SQL语句成功了,返回TRUE,但并不意味着后续SQL在执行过程中没有出错
参考:http://php.net/manual/zh/mysqli.multi-query.php

问题

使用mysqli_multi_query,遇到2个问题:
1、多条sql语句(alter语句),只有第1条操作数据库成功了,剩下几条对数据库的操作都没有成功。
2、循环向多个表中插入sql,第一个表执行完成后,执行第二个表时,会报Commands out of sync; you can’t run this command now。

原因

这2个问题都是因为结果集没有释放导致的。
错误提示表明,消息执行顺序有问题,multi->query执行完成后除了返回实际结果集外,还返回了存储过程执行的状态。在执行第2个sql语句前,需要将所有的结果集释放掉。

如果释放结果集后,还是会出现问题1,建议用mysqli_error($con) 打印下sql执行的错误日志,看看是否因为sql执行时有错误导致没有更新db成功

修复代码
for($i =<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值