PHP 8.4.1 Released!

mysqli::next_result

mysqli_next_result

(PHP 5, PHP 7, PHP 8)

mysqli::next_result -- mysqli_next_resultPrepare next result from multi_query

Опис

Об'єктно-орієнтований стиль

public mysqli::next_result(): bool

Процедурний стиль

mysqli_next_result(mysqli $mysql): bool

Prepares next result set from a previous call to mysqli_multi_query() which can be retrieved by mysqli_store_result() or mysqli_use_result().

Параметри

mysql

Тільки процедурний стиль: об'єкт mysqli, якого повертає функція mysqli_connect() або mysqli_init()

Значення, що повертаються

Повертає true у разі успіху або false в разі помилки. Also returns false if the next statement resulted in an error, unlike mysqli_more_results().

Помилки/виключення

Якщо увімкнені звіти про помилки mysqli (MYSQLI_REPORT_ERROR) і запитана операція не виконалась, буде виведено попередження, але якщо встановлено режим MYSQLI_REPORT_STRICT, буде викинуто виключення mysqli_sql_exception.

Приклади

See mysqli_multi_query().

Прогляньте також

add a note

User Contributed Notes 2 notes

up
2
admin at travian-utils dot com
15 years ago
Stored procedures few rowset example:

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'])){
// do some
}
SQLnext();
while(
$row=mysqli_fetch_assoc($global['result'])){
// do some
}
SQLnext();
while(
$row=mysqli_fetch_assoc($global['result'])){
// do some
}
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']);
}
}
?>
up
0
pawel dot barcik at gmail dot com
16 years ago
this function returns FALSE when you have an error in your syntax in one of your queries, so be carefull with this type of construction when tracking errors:

<?php

//error in the second sub query
$result = $db->multi_query("select * from news; seleeeeeeect id from news; update news set title='new title' where id= 12 ");

//code inside object class
$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());

?>

in this construction all you have in the $this->_errnoMulti is :

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

which means that there are no errors if you are not checking how many queries are executed!
To Top