一次執行多條SQL命令使用mysqli對象中的multi_query()方法。
具體做法:
把多條SQL命令寫在同一個字串裡作為參數傳遞給multi_query()方法,多條SQL之間使用分號(;)分隔。如果第一條命令在執行裡沒有出錯,這個方法就會返回TRUE,否則返回FALSE 。
由於multi_query()方法能夠串連執行一個或多個查詢,而每條SQL命令都可能返回一個結果,在必要時需要擷取每一個結果集。所以對該方法返回結果的處理也有一些變化,第一條查詢命令的結果要用mysqli對象中的use_result()或store_result()方法來讀取,當然,使用store_result()方法將全部結果立刻返回到用戶端,這種做法效率更高。另外,可以用mysqli對象中的more_results()方法檢查是否還有其他的結果集。
如果想對下一個結果集進行處理,應該調用mysqli對象中的next_results()方法,擷取下一個結果集。這個方法返回TRUE或FALSE。
如果有下一個結果集,也需要使用use_result()或store_result()方法來讀取。
執行多條SQL命令代碼如下:
$mysqli=new mysqli("localhost","mysql_user","mysql_pwd","my_db_name");
/* check connection */
if($mysqli->mysql_connect_errno()){
printf ("串連失敗:%s
",mysql_connect_error());
exit();
}
$query="SET NAMES GB2312;";
$query.="SELECT CURERENT_USER();" //擷取使用串連的使用者名稱
$query.="SELECT name,phone FROM contactinfo LIMIT 2";
/* execute multi query */
if($mysqli->multi_query($query)){
do{
if($result=$mysqli->store_result()){
//$mysqli->store_result() 擷取第一個結果集
while($row=$result->fetch_row()){
foreach($row as $data){
echo $data." ";
}
}
echo '
';
}
if($mysqli->more_results()){
echo "----------------------------
";
}
}while($mysqli->next_result());
}
/* close connection */
$mysqli->close();
?>
註:
在以上樣本中,使用mysqli對象中的multi_query()方法一次執行三條SQL命令,擷取多個結果集並從中遍曆資料。如果在命令的處理過程中發生了錯誤,multi_query()和next_result()方法就會出現問題。
multi_query()方法的返回返回值,以及mysqli的屬性errno、error、info等只與第一條SQL命令有關,無法判斷第二條及以後的命令是否在執行時發生了錯誤。所以在執行multi_query()方法的返回值是TRUE時,並不意味著後續命令在執行時沒有出錯。
以上就介紹了mysqli對象中的multi_query()方法,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。