使用mysqli对象中的query()方法每次调用只能执行一条SQL命令。如果需要一次执行多条SQL命令,就使用到mysqli对象中的multi_query()方法。
具体做法:将多条SQL命令写在同一个字符串里,作为参数传递给multi_query()方法,多条SQL之间使用“;”号分隔。若第一条SQL命令在执行时没有出错,就会返回true,否 则返回false。
例如:
<?php
$mysqli = new mysqli("localhost","root","密码","库名"); //连接数据库
if(mysqli_connect_error()){ //检查连接,若错误
printf("连接失败:",mysqli_connect_error());
exit();
}
$query = "set names utf8;select current_user();select name from 表";
if($mysqli->multi_query($query)){ //执行多条SQL语句
do{
if($result = $mysqli->store_result()){ //获取第一个结果集
while($row = $result->fetch_row()){ //遍历结果集中的每条数据
foreach($row as $data){ //从每行记录数组中获取每列数据
echo $data; //输出每列数据
}
}
$result->close(); //关闭一个打开的结果集
}
if($mysqli->more_result()){ //判断是否还有更多的结果集
}
}while($mysqli->next_result()); //获取下一个结果集,并继续执行循环
}
$mysqli->close(); //关闭mysqli连接
?>
在上面的例子中,如果在命令的处理过程中发生了错误,multi_query()和next_result()方法就会出现问题。multi_query()方法的返回值,以及mysqli的属性errno、error、info等只与第一条SQL命令有关,无法判断第二条以及以后的命令是否在执行时发生了错误。所以在执行multi_query()方法的返回值是true时,并不意味着后续命令在执行时没有出错。