PHP Conference Japan 2024

mysqli::next_result

mysqli_next_result

(PHP 5, PHP 7, PHP 8)

mysqli::next_result -- mysqli_next_result準備 multi_query 的下一個結果

描述

物件導向風格

public mysqli::next_result(): 布林值

程序風格

mysqli_next_result(mysqli $mysql): 布林值

準備從先前呼叫 mysqli_multi_query() 的下一個結果集,可以使用 mysqli_store_result()mysqli_use_result() 擷取。

參數

mysql

僅限程序式風格:由 mysqli_connect()mysqli_init() 返回的 mysqli 物件

返回值

成功時返回 true,失敗時返回 false。如果下一條語句導致錯誤,也會返回 false,這與 mysqli_more_results() 不同。

錯誤/例外

如果啟用了 mysqli 錯誤報告 (MYSQLI_REPORT_ERROR) 且請求的操作失敗,則會產生警告。此外,如果模式設定為 MYSQLI_REPORT_STRICT,則會改為拋出 mysqli_sql_exception

範例

參見 mysqli_multi_query()

另請參閱

新增註釋

使用者貢獻的註釋 2 則註釋

pawel dot barcik at gmail dot com
16 年前
如果您的其中一個查詢的語法有錯誤,此函式會返回 FALSE,因此在追蹤錯誤時請小心使用這種結構

<?php

//第二個子查詢有錯誤
$result = $db->multi_query("select * from news; seleeeeeeect id from news; update news set title='new title' where id= 12 ");

//物件類別內的程式碼
$this->_db = new Mysqli($host, $user, $password, $database, $port, $socket);

do {
$result = $this->_db->store_result();
$this->_resultMulti[] = $result;
$this->_errnoMulti[] = $this->_db->errno;

if(
is_object($result)) {
$result->free_result();
}

} while(
$this->_db->next_result());

?>

在這個結構中,`$this->_errnoMulti` 裡只有

array(1) {
[0]=>
int(0)
}

這表示如果您沒有檢查執行了多少查詢,則沒有錯誤!
admin at travian-utils dot com
15 年前
儲存程序多個結果集範例

some_file.php
<?php
function proc() {
global
$global;
$db_connect_list = array('site');
SQLinit($db_connect_list);
if(isset(
$global['error'])){return;}
SQL('CALL `procedure`();');
while(
$row=mysqli_fetch_assoc($global['result'])){
// 做一些事
}
SQLnext();
while(
$row=mysqli_fetch_assoc($global['result'])){
// 做一些事
}
SQLnext();
while(
$row=mysqli_fetch_assoc($global['result'])){
// 做一些事
}
SQLclose($db_connect_list);
}
?>

config.php
<?php
$global
['sys']['db']['site'] = array('host'=>'localhost', 'user'=>'site', 'pass'=>'');
?>

engine.php
<?php
function SQLinit($array_list){
global
$global;
foreach(
$array_list as $set){
if(!
$global['sys']['db'][$set]['connect'] = mysqli_connect(
$global['sys']['db'][$set]['host'],
$global['sys']['db'][$set]['user'],
$global['sys']['db'][$set]['pass'])){
$global['error']['code'] = 500;
$global['error']['text'] = 'Database not avaliable';
$w=fopen('error.log','a+');
fwrite($w,'time: '.date('Y M d H:i:s')."\r\n");
fwrite($w,'errno: '.mysqli_connect_errno()."\r\n");
fwrite($w,'error: '.mysqli_connect_error()."\r\n");
fclose($w);
return;
}
if(!isset(
$global['sys']['default_connect']))
$global['sys']['default_connect'] = $global['sys']['db'][$set]['connect'];
SQL('SET NAMES \'utf8\' COLLATE \'utf8_unicode_ci\';', $global['sys']['db'][$set]['connect']);
SQL('SET CHARACTER SET \'utf8\';', $global['sys']['db'][$set]['connect']);
SQL('SET character_set_connection = \'utf8\';', $global['sys']['db'][$set]['connect']);
}
}
function
mTime(){
list(
$usec, $sec) = explode(" ", microtime());
return ((float)
$usec+(float)$sec);
}
function
SQL($sql, $connect = -1){
global
$global;
if(
$connect === -1)$connect = $global['sys']['default_connect'];
if(isset(
$global['error']['sql']))return;
while (
$connect->next_result()) $connect->store_result();
$begin=mTime();
$global['result']=mysqli_query($connect, $sql);
$end=mTime();
$global['sys']['time_sql']+=$end-$begin;
$error=mysqli_error($connect);
if(
$error!=''){
$global['error']['code'] = 502;
$global['error']['text'] = 'SQL error';
$global['error']['sql'] = true;
$w=fopen('error.log','a+');
fwrite($w,'time: '.date('Y M d H:i:s')."\r\n");
fwrite($w,'errno: '.mysqli_errno($connect)."\r\n");
fwrite($w,'error: '.$error."\r\n");
fwrite($w,'sql: '.$sql."\r\n");
fclose($w);
}else{
$w=fopen('sql.log','a+');
fwrite($w,'time: '.date('Y M d H:i:s')."\r\n");
fwrite($w,'sql: '.$sql."\r\n");
fclose($w);
}
}

function
SQLnext($connect = -1){
global
$global;
if(
$connect === -1)$connect = $global['sys']['default_connect'];
if(isset(
$global['error']['sql']))return;
$connect->next_result();
$global['result'] = $connect->store_result();
}

function
SQLclose($array_list){
global
$global;
foreach(
$array_list as $set){
mysqli_close($global['sys']['db'][$set]['connect']);
}
}
?>
To Top