我有代码,它基本上是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";
编辑:我的更改的完整代码
<?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建议在 and 中添加一个条件
while
并更改$mysqli->next_result()
为$mysqli->next_result() && $mysqli->more_results()
,但是这个解决方案不能很好地工作。它确实消除了错误,但它省略了最后一个结果。