为什么 mysqli_num_rows() 在 PHP 中返回 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中文网其他相关文章!