在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(); ?>
执行结果: