ホームページ >バックエンド開発 >PHPチュートリアル >`mysqli_stmt::execute()` の後に `mysqli_num_rows()` が 0 を返すのはなぜですか?
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 サイトの他の関連記事を参照してください。