ホームページ >バックエンド開発 >PHPチュートリアル >`mysqli_stmt::execute()` の後に `mysqli_num_rows()` が 0 を返すのはなぜですか?

`mysqli_stmt::execute()` の後に `mysqli_num_rows()` が 0 を返すのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-05 10:53:11360ブラウズ

Why Does `mysqli_num_rows()` Return 0 After `mysqli_stmt::execute()`?

PHP で mysqli_num_rows() が 0 を返す理由

MySQLi では、最初に結果を取得せずにクエリを実行すると、不正な行数が発生する可能性があります。 mysqli_num_rows() でこの問題が発生した場合は、次の点を考慮してください:

コード サンプルと説明

以下のコード スニペットを考慮してください:

$mysqli->prepare("SELECT id, title, visible, parent_id FROM content WHERE parent_id=? ORDER BY page_order ASC;");
$stmt->bind_param('s', $data->id);
$stmt->execute();

$num_of_rows = $stmt->num_rows; // Error!

$stmt->bind_result($child_id, $child_title, $child_visible, $child_parent);

while ($stmt->fetch()) {
  //...
}

echo($num_of_rows);

このコードでは、結果がまだ取得されていないため、mysqli_num_rows() は常に 0 を返します。

解決策: mysqli_stmt::store_result() を使用します

mysqli_num_rows() を呼び出す前に、mysqli_stmt::store_result() を呼び出して、クエリの結果がバッファに格納されます。このプロセスにより、rowCount カウントが有効になります。

$mysqli->prepare("SELECT id, title, visible, parent_id FROM content WHERE parent_id=? ORDER BY page_order ASC;");
$stmt->bind_param('s', $data->id);
$stmt->execute();

$stmt->store_result(); // Fetches results into a memory buffer
$num_of_rows = $stmt->num_rows;

$stmt->bind_result($child_id, $child_title, $child_visible, $child_parent);

while ($stmt->fetch()) {
  //...
}

echo($num_of_rows);

mysqli_num_rows() のドキュメントを必ず確認してください。詳細は説明セクションに記載されていることが多いです。

以上が`mysqli_stmt::execute()` の後に `mysqli_num_rows()` が 0 を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。