Почему возникает эта ошибка PHP: «Строгие стандарты: mysqli :: next_result (): следующего набора результатов нет».?

У меня есть код, который в основном является копией кода php.net , но по какой-то причине он не работает. Вот код на php.net:

<?php $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $query = "SELECT CURRENT_USER();"; $query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5"; /* execute multi query */ if ($mysqli->multi_query($query)) { do { /* store first result set */ if ($result = $mysqli->store_result()) { while ($row = $result->fetch_row()) { printf("%s\n", $row[0]); } $result->free(); } /* print divider */ if ($mysqli->more_results()) { printf("-----------------\n"); } } while ($mysqli->next_result()); } /* close connection */ $mysqli->close(); ?> 

Первое изменение, которое я сделал, это соединение:

 $mysqli = new mysqli("localhost", "root", "", "fanfiction"); 

Второе изменение, которое я сделал, это запросы:

 $query = "SELECT first FROM tests;"; $query .= "SELECT second FROM tests;"; $query .= "SELECT third FROM tests;"; $query .= "SELECT fourth FROM tests"; 

EDIT: полный код с моими изменениями

 <?php $mysqli = new mysqli("localhost", "root", "", "fanfiction"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $query = "SELECT first FROM tests;"; $query .= "SELECT second FROM tests;"; $query .= "SELECT third FROM tests;"; $query .= "SELECT fourth FROM tests"; /* execute multi query */ if ($mysqli->multi_query($query)) { do { /* store first result set */ if ($result = $mysqli->store_result()) { while ($row = $result->fetch_row()) { printf("%s\n", $row[0]); } $result->free(); } /* print divider */ if ($mysqli->more_results()) { printf("-----------------\n"); } } while ($mysqli->next_result()); } /* close connection */ $mysqli->close(); ?> 

Ошибка, которую я получаю:

Строгие стандарты: mysqli :: next_result () : Следующий набор результатов не существует. Вызовите mysqli_more_results () / mysqli :: more_results (), чтобы проверить, следует ли вызывать эту функцию / метод по адресу в строке строки

Я искал решение по сети, и особенно здесь, в StackOverflow, но я не нашел полезных решений. Большинство решений, которые я нашел, были одним из двух:

  • В этом решении @Hammerite говорит, чтобы изменить цикл от do-while до while . Это говорит о том, что код php.net имеет проблему в своей логике, и мне очень сложно поверить. Но что более важно, это просто не работает для меня.
  • В этом решении @mickmackusa предлагает добавить условие в то while и изменить $mysqli->next_result() на $mysqli->next_result() && $mysqli->more_results() , но это решение работает не очень хорошо. Он действительно удаляет ошибку, но он пропускает последний результат.

Solutions Collecting From Web of "Почему возникает эта ошибка PHP: «Строгие стандарты: mysqli :: next_result (): следующего набора результатов нет».?"

Попробуйте

 } while ($mysqli->more_results() && $mysqli->next_result()); 

sscce :

 <?php ini_set('display_errors', 'on'); error_reporting(E_ALL|E_STRICT); $mysqli = new mysqli("localhost", "localonly", "localonly", "test"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $mysqli->query('CREATE TEMPORARY TABLE City (ID int auto_increment, `Name` varchar(32), primary key(ID))') or die($mysqli->error); $stmt = $mysqli->prepare("INSERT INTO City (`Name`) VALUES (?)") or die($mysqli->error); $stmt->bind_param('s', $city) or die($stmt->error); foreach(range('A','Z') as $c) { $city = 'city'.$c; $stmt->execute() or die($stmt->error); } $query = "SELECT CURRENT_USER();"; $query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5"; /* execute multi query */ if (!$mysqli->multi_query($query)) { trigger_error('multi_query failed: '.$mysqli->error, E_USER_ERROR); } else { do { /* store first result set */ if ($result = $mysqli->store_result()) { while ($row = $result->fetch_row()) { printf("'%s'\n", $row[0]); } $result->free(); } /* print divider */ if ($mysqli->more_results()) { printf("-----------------\n"); } } while ($mysqli->more_results() && $mysqli->next_result()); } 

печать

 'localonly@localhost' ----------------- 'cityU' 'cityV' 'cityW' 'cityX' 'cityY' 

без предупреждений / уведомлений.