mysql multi_query_MySQLi面向对象实践--multi_query

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

需要注意的是:

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

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

$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()

$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()

$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;

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值