MySQLi物件導向實踐 multi query

2022-03-19 00:11:09 字數 2139 閱讀 3911

多條用分號分隔的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基於面向過程的程式設計和物件導向的程式設計是相對的,其...