基本的に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");
私が行った2番目の変更はクエリでした:
$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()を呼び出して、行line numberのアドレスでこの関数/メソッドを呼び出すかどうかを確認してください
私はネット上、特にここでは StackOverflow で解決策を検索しましたが、役立つ解決策は見つかりませんでした。私が見つけた解決策のほとんどは、次の 2 つのいずれかでした。
- このソリューションでは、@Hammeriteはループを から に変更するよう
do-while
に指示していますwhile
。これは、php.net のコードのロジックに問題があることを示唆しており、信じがたいことです。しかし、もっと重要なことに、それは私にはうまくいきません。 - このソリューションでは、@mickmackusaは に条件を追加して
while
に変更$mysqli->next_result()
することを提案して$mysqli->next_result() && $mysqli->more_results()
いますが、このソリューションはうまく機能しません。確かにエラーは削除されますが、最後の結果は省略されます。