У меня есть код, который в основном является копией кода 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, но я не нашел полезных решений. Большинство решений, которые я нашел, были одним из двух:
do-while
до while
. Это говорит о том, что код php.net имеет проблему в своей логике, и мне очень сложно поверить. Но что более важно, это просто не работает для меня. while
и изменить $mysqli->next_result()
на $mysqli->next_result() && $mysqli->more_results()
, но это решение работает не очень хорошо. Он действительно удаляет ошибку, но он пропускает последний результат. Попробуйте
} 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'
без предупреждений / уведомлений.