mysqli::next_result

mysqli_next_result

(PHP 5, PHP 7, PHP 8)

mysqli::next_result -- mysqli_next_result准备来自 multi_query 的下一个结果

描述

面向对象风格

public mysqli::next_result(): bool

过程化风格

mysqli_next_result(mysqli $mysql): bool

从之前对 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
14 年前
存储过程的少量行集示例

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'] = '数据库不可用';
$w=fopen('error.log','a+');
fwrite($w,'时间: '.date('Y M d H:i:s')."\r\n");
fwrite($w,'错误码: '.mysqli_connect_errno()."\r\n");
fwrite($w,'错误信息: '.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 错误';
$global['error']['sql'] = true;
$w=fopen('error.log','a+');
fwrite($w,'时间: '.date('Y M d H:i:s')."\r\n");
fwrite($w,'错误码: '.mysqli_errno($connect)."\r\n");
fwrite($w,'错误信息: '.$error."\r\n");
fwrite($w,'SQL 语句: '.$sql."\r\n");
fclose($w);
}else{
$w=fopen('sql.log','a+');
fwrite($w,'时间: '.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