mysqli中多语句查询insert_id和affected_rows

在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-&gt;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-&gt;multi_query($sqls)) {
  $affectRows = 1; 
  do {
    $affectRows += $mysqli-&gt;affected_rows;
    $mysqli-&gt;next_result();
  } while($mysqli-&gt;more_results());
  echo "执行成功!<br> 最后插入的id:{$mysqli-&gt;insert_id} <br> ";
  echo "共影响的行数:{$affectRows} <br>";
} else {
  echo '错误:' . $mysqli-&gt;errno . '(' . $mysqli-&gt;error . ')';
}

$mysqli-&gt;close();

?&gt;

执行结果:

mutiquery_id_affectedrows