使用multi_query可以实现执行多条SQL语句,每一条SQL语句通过分号分隔。

需要注意的是:

  多条用分号分隔的SQL语句中,只要有一条SQL语句执行失败,那么这一条SQL语句以及之后的SQL语句就不会执行。

  只有当第一条SQL语句执行失败,那么multi_query()的返回值才为false。如果第一条SQL语句执行成功了,那么都会返回true。

<?php
$mysqli = new Mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno ){
die( $mysqli->connect_error );
}
$mysqli->set_charset("utf8");
$sql = "";
$sql .= "truncate table mysqli;"; //第一条SQL语句
$sql .= "insert into mysqli (id, name) values (null, 'aaaa'),(null, 'bbbb');";//第二条SQL语句
$sql .= "update table mysqli where uid = 1;";//第三条SQL语句,因为没有uid字段,所以出错
$sql .= "insert into mysqli (id, name) values (null, 'cccc');";
$res = $mysqli->multi_query($sql);
var_dump($res);
?>

  查看数据库:

mysql> select * from mysqli;
+----+------+
| id | name |
+----+------+
| 1 | aaaa |
| 2 | bbbb |
+----+------+
2 rows in set (0.00 sec)

  可以看到第三条SQL语句执行失败之后,第四条插入数据的SQL语句也没有执行

multi_query执行多条select查询语句

  对于执行多条select语句,那么返回的结果集也会有多个,所以就需要“切换结果集”,

  使用Mysqli_result Mysqli::use_result 和 Mysqli_result Mysqli::store_result()都可以将获取multi_query的结果中 指针所指向的结果集,通过移动内部指针来遍历多个结果集。

  可以使用bool Mysqli::more_result()来检测是否还有结果集,如果有,则可以通过bool Mysqli::next_result()将内部指针指向下一个结果集。

方法一:使用Mysqli_result Mysqli::use_result()

<?php
$mysqli = new Mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno ){
die( $mysqli->connect_error );
}
$mysqli->set_charset("utf8");
$sql = "";
$sql .= "select * from mysqli;";
$sql .= "select * from user;";
$res = $mysqli->multi_query($sql);
if( $res ) {
do{
if( $mysqli_result = $mysqli->use_result() ){
print_r( $mysqli_result->fetch_all( MYSQLI_ASSOC ) );
}
} while( $mysqli->more_results() && $mysqli->next_result() );
} else {
echo "error ".$mysqli->errno." : ".$mysqli->error;
}
?>

  

方法二:Mysqli_result Mysqli::store_result()

<?php
$mysqli = new Mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno ){
die( $mysqli->connect_error );
}
$mysqli->set_charset("utf8");
$sql = "";
$sql .= "select * from mysqli;";
$sql .= "select * from user;";
$res = $mysqli->multi_query($sql);
if( $res ) {
do{
if( $mysqli_result = $mysqli->store_result() ){
print_r( $mysqli_result->fetch_all( MYSQLI_ASSOC ) );
}
} while( $mysqli->more_results() && $mysqli->next_result() );
} else {
echo "error ".$mysqli->errno." : ".$mysqli->error;
}
?>

  

最新文章

  1. Eclipse的link方式安装JBPM6插件(JBPM学习之一)
  2. topo排序 + 用邻接表优化后的
  3. uwsgi 启动脚本 每隔三小时重启
  4. JavaScript 的字符串转换
  5. 2.1.5 用SSS扫描器实施扫描
  6. KVM通过qemu实现USB重定向
  7. DataGrid的打印预览和打印
  8. PT100测温函数
  9. DataGridView的DataGridViewComboBoxColumn列点击一次,自动处于编辑状态
  10. Android中Chronometer 计时器和震动服务控件
  11. jQuery第二章
  12. Docker镜像管理
  13. container
  14. 【模板】字符串匹配的三种做法(Hash、KMP、STL)
  15. [js]js设计模式-构造函数模式
  16. input标签(单选框和复选框)
  17. (转)SSL/TLS 漏洞“受戒礼”,RC4算法关闭
  18. JVM调优命令-jmap
  19. Zabbix日常监控(触发器表达式、远程执行命令、宏简等)简单记录
  20. Robots协议(爬虫协议、机器人协议)

热门文章

  1. 转:// 再说 Oracle RAC services
  2. Java连接Redis之redis的增删改查
  3. PAT A1034 Head of a Gang (30 分)——图遍历DFS,字符串和数字的对应保存
  4. mysql基础讲解
  5. 博客搬家了qwq
  6. 洛谷 P2835 刻录光盘
  7. VS2015编写的MFC上位机,波特率可调,可动态显示曲线,可显示三维
  8. linux驱动编写之阻塞与非阻塞
  9. 使用yield返回IEnumber&lt;T&gt;集合
  10. 字符串阵列String[]转换为整型阵列Int[]