首页 >后端开发 >php教程 >为什么 `mysqli_stmt::execute()` 之后 `mysqli_num_rows()` 返回 0?

为什么 `mysqli_stmt::execute()` 之后 `mysqli_num_rows()` 返回 0?

Susan Sarandon
Susan Sarandon原创
2024-12-05 10:53:11365浏览

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

为什么 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn