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

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

Susan Sarandon
发布: 2024-12-05 10:53:11
原创
356 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板