在处理网页订单的时候,想到最多的就是 mysqli::multi_query()这个了,可以同时提交多条语句:
1、在订单库里生成订单,并返回一个订单号
2、将购物车里产品清单转移到订单清单列表中
A、Copy到订单列表表中
B、清空购物车
这就是提交订单过程中,通常所需要处理的步骤了, mysqli::multi_query()的用武之地,然而在使用 mysqli::multi_query()时,需要注意以下几点:
1、 mysqli::multi_query()只需要第一条语句执行成功就会返回TRUE,否则返回FALSE,所以需要自己依次判断每个语句是否执行成功!
2、 在执行mysqli::multi_query()后,如果还有他的语句需要执行时,就需要刷新mysqli::multi_query()的查询结果,如:
while ($mysqli->next_result()) {;} // flush multi_queries
否则mysqli::multi_query()后面的语句将不执行,返回FALSE!
这是PHP论坛上的例子介绍:http://www.php.net/manual/zh/mysqli.multi-query.php,详细代码如下:
// BAD CODE:
$mysqli->multi_query(” Many SQL queries ; “); // OK
$mysqli->query(” SQL statement #1 ; “) // not executed!
$mysqli->query(” SQL statement #2 ; “) // not executed!
$mysqli->query(” SQL statement #3 ; “) // not executed!
$mysqli->query(” SQL statement #4 ; “) // not executed!
?>
The only way to do this correctly is:
// WORKING CODE:
$mysqli->multi_query(” Many SQL queries ; “); // OK
while ($mysqli->next_result()) {;} // flush multi_queries
$mysqli->query(” SQL statement #1 ; “) // now executed!
$mysqli->query(” SQL statement #2 ; “) // now executed!
$mysqli->query(” SQL statement #3 ; “) // now executed!
$mysqli->query(” SQL statement #4 ; “) // now executed!
?>
可惜,我在我的电脑上测试不成功,还是按照手册的代码,稍作调整,测试成功:
$sql = "select * from try_user where id=100;
select * from try_user where id=200;
select * from try_user where id=300;";
if($db->multi_sql($sql)){
do {
if($result = $db->mysqli->store_result()) {
$result->close();
}
if(!$db->mysqli->more_results()) break;
}while($db->mysqli->next_result());
}
echo "
";
var_dump($db->get_one("try_user", "where id=400"));
echo "
";
var_dump($db->get_one("try_user", "where id=500"));
echo "
";
var_dump($db->get_one("try_user", "where id=600"));