在php的mysqli中有多条SQL语句执行的函数multi_query,可以一次执行多条SQL语句,对于不返回结果集的SQL语句在使用中发现获取insert_id和affected_rows不能自动进行多语句的累加数据,还得配合more_results「是否还有结果集」和next_result「下一个结果集」来进行计算,按照预计的来讲对于不返回结果集的SQL语句来说,应该能直接返回最后插入的ID和受影响的行数,结果却不然,在此记录一下。
<!--?php
/*
* 使用mysqli的多语句查询multi_query中获得最后插入ID和受影响的行数
* 数据库表为shops,字段有id,name,price,nums,desc,id为子增长字段
*/
header('Content-Type: text/html; charset=utf-8');
$mysqli = new mysqli("localhost", "root", "liutao", "test");
if($mysqli--->connect_error) {
echo '错误:' . $mysqli->connect_error;
exit;
}
$sqls = "insert into shops(name,price,nums,desc)
values('笔记本','1.2','1000','B5 笔记本');
insert into shops(name,price,nums,desc)
values('0.5中性笔','1.8','30','0.5的黑色中性笔');
insert into shops(name,price,nums,desc)
values('档案袋','2.2','100','A4透明塑料档案袋');
insert into shops(name,price,nums,desc)
values('订书钉','3.5','50','订书钉');";
if($mysqli->multi_query($sqls)) {
$affectRows = 1;
do {
$affectRows += $mysqli->affected_rows;
$mysqli->next_result();
} while($mysqli->more_results());
echo "执行成功!<br> 最后插入的id:{$mysqli->insert_id} <br> ";
echo "共影响的行数:{$affectRows} <br>";
} else {
echo '错误:' . $mysqli->errno . '(' . $mysqli->error . ')';
}
$mysqli->close();
?>
执行结果:
