多條用分號分隔的sql語句中,只要有一條sql語句執行失敗,那麼這一條sql語句以及之後的sql語句就不會執行。
只有當第一條sql語句執行失敗,那麼multi_query()的返回值才為false。如果第一條sql語句執行成功了,那麼都會返回true。
<?php$mysqli = new mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno )
$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語句也沒有執行
對於執行多條select語句,那麼返回的結果集也會有多個,所以就需要「切換結果集」,
使用mysqli_result mysqli::use_result 和 mysqli_result mysqli::store_result()都可以將獲取multi_query的結果中 指標所指向的結果集,通過移動內部指標來遍歷多個結果集。
可以使用bool mysqli::more_result()來檢測是否還有結果集,如果有,則可以通過bool mysqli::next_result()將內部指標指向下乙個結果集。
<?php$mysqli = new mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno )
$mysqli->set_charset("utf8");
$sql = "";
$sql .= "select * from mysqli;";
$sql .= "select * from user;";
$res = $mysqli->multi_query($sql);
if( $res )
} while( $mysqli->more_results() && $mysqli->next_result() );
} else
?>
<?php$mysqli = new mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno )
$mysqli->set_charset("utf8");
$sql = "";
$sql .= "select * from mysqli;";
$sql .= "select * from user;";
$res = $mysqli->multi_query($sql);
if( $res )
} while( $mysqli->more_results() && $mysqli->next_result() );
} else
?>
MySQLi物件導向實踐 select
對於update insert delete請參考 mysqli new mysqli mysqli connect localhost root root test if mysqli connect errno mysqli set charset utf8 sql select from my...
物件導向的mysqli基礎
mysqli作為php擴充套件庫的一部分是乙個很好的運算元據庫的介面。mysqli的操作方式有兩種,一種是面向過程的,另一類是物件導向的。本文主要講的是物件導向的mysqli操作,主要是作為乙個引子,更多的東西希望能多多參考php官方文件,看完本文再參考一下文件,相信對mysqli的操作會容易上手 ...
MySQLi基於物件導向的程式設計
mysqli在windows上,對於php 5.3或更新版本,mysqli擴充套件預設開啟,對於php 5.0 5.1 5.2,mysqli擴充套件預設並不會開啟,因此php.ini中php mysqli.dll這個dll 必須開啟。mysqli基於面向過程的程式設計和物件導向的程式設計是相對的,其...