前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP mysqli_multi_query 连续执行的坑

PHP mysqli_multi_query 连续执行的坑

作者头像
zcqshine
发布2018-05-11 16:13:40
1.9K0
发布2018-05-11 16:13:40
举报
文章被收录于专栏:zcqshine's blog

今天在做分批量存库的时候用如下类似语句:

代码语言:javascript
复制
$sql1 = "update `table` set ...; update `table` set xxx;...;";
$sql2 = "update `table` set ...; update `table` set xxx;...;";
mysqli_multi_query($link, $sql1);
mysqli_multi_query($link, $sql2);

发现只有 sql1 的语句被执行了, 后面的没被执行. 想想以前做 java 批量更新的时候类似这样的语句执行的很happy 啊,为什么轮到 php 的时候就这鸟样了, 最开始还以为是自己的 sql 语句写的有问题,但是拿到 mysql 的客户端一执行, 没问题. 然后就猜到应该是 mysqli_multi_query 这个函数的问题了.

google 了一把, 有个文章里提到了参考官方手册. 对啊, 有问题可以看看官方文档怎么说的. 好了, 找到官方手册后, 发现问题中被置顶的注意事项就是这个:

WATCH OUT: if you mix $mysqli->multi_query and $mysqli->query, the latter(s) won't be executed!

代码语言:javascript
复制
<?php
// BAD CODE:
$mysqli->multi_query(" Many SQL queries ; "); // OK
$mysqli->query(" SQL statement #1 ; ") // not executed!
$mysqli->query(" SQL statement #2 ; ") // not executed!
$mysqli->query(" SQL statement #3 ; ") // not executed!
$mysqli->query(" SQL statement #4 ; ") // not executed!
?>
//The only way to do this correctly is:
<?php
// WORKING CODE:
$mysqli->multi_query(" Many SQL queries ; "); // OK
while ($mysqli->next_result()) {;} // flush multi_queries
$mysqli->query(" SQL statement #1 ; ") // now executed!
$mysqli->query(" SQL statement #2 ; ") // now executed!
$mysqli->query(" SQL statement #3 ; ") // now executed!
$mysqli->query(" SQL statement #4 ; ") // now executed!
?>

好了,问题找到了.修改代码:

代码语言:javascript
复制
if(mysqli_multi_query($link, $sqls)){
    while(mysqli_next_result($link)){
        if($result = mysqli_store_result($link)){
            mysqli_free_result($result); //释放内存
        }
    }
}

这样做了以后就可以正常执行了.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档