使用multi_query批量插入两行数据失败求助
解决PHP mysqli multi_query批量插入失败的问题
我来帮你排查下这个批量插入没生效的问题~结合你的代码,主要有几个关键点需要调整:
1. 多条SQL语句必须用分号分隔
MySQL的multi_query()要求多条SQL语句之间必须用**分号;**分隔,你的代码里直接把两个INSERT语句拼接在一起,没有添加分隔符,数据库会把它当成一条语法错误的SQL来处理,自然不会执行成功。
修正后的SQL拼接代码:
$q1 = "INSERT INTO auto_charge(phone,charged_at,created_at,updated_at) VALUES ('123456789','2018-01-24 12:37:07','2018-01-27 09:19:42','2018-01-27 09:19:42');"; $q1 .= "INSERT INTO auto_charge(phone,charged_at,created_at,updated_at) VALUES ('987654321','2018-01-24 12:37:07','2018-01-27 09:19:42','2018-01-27 09:19:42');";
2. 添加错误排查逻辑
即使数据库连接正常,也可能存在SQL语法错误、字段权限、数据格式不匹配等问题,一定要添加错误处理来定位问题:
$result = $conn->multi_query($q1); if (!$result) { // 打印错误信息,方便排查 die("批量执行失败: " . $conn->error); }
3. 处理所有结果集
使用multi_query()后,需要遍历处理所有语句的结果集,否则可能会占用数据库连接资源,甚至影响后续操作。对于INSERT语句,可以用next_result()来完成遍历:
// 遍历所有结果集,确保所有语句执行完毕 do { // INSERT语句无返回结果集,这里仅完成遍历动作 } while ($conn->next_result());
额外排查技巧
你可以先把拼接好的$q1内容打印出来,直接在数据库客户端(比如phpMyAdmin、Navicat)中执行,看看是否能成功插入。如果客户端执行也失败,那就是SQL语句本身的问题;如果客户端能成功,再回到代码里排查mysqli的配置或执行逻辑。
内容的提问来源于stack exchange,提问作者sina
相关产品推荐
相关产品推荐

