首页 >后端开发 >php教程 >为什么 mysqli_stmt::num_rows 返回 0,如何修复它?

为什么 mysqli_stmt::num_rows 返回 0,如何修复它?

DDD
DDD原创
2024-12-11 16:54:15947浏览

Why Does mysqli_stmt::num_rows Return 0, and How Can I Fix It?

理解 mysqli_stmt::num_rows 返回 0 的奥秘

在动态数据库交互的世界中,遇到问题并不罕见从 MySQL 查询中获取正确的行数。特别是在使用 mysqli_stmt::num_rows 函数时,可能会出现此问题。

问题陈述:返回值为零

开发人员经常遇到 mysqli_stmt::num_rows 的情况尽管执行查询后有结果行,函数仍持续返回 0。这种差异可能会非常令人沮丧,从而妨碍准确的数据检索和处理。

解决方案:mysqli_stmt::store_result() 的强大功能

解决问题的关键这个问题在于理解 mysqli_stmt::num_rows 的行为。该函数不会自动统计结果集中的行数;相反,它根据特定条件返回一个值:

  • 没有 mysqli_stmt::store_result() 调用: 如果 mysqli_stmt::store_result() 函数之前没有被调用访问mysqli_stmt::num_rows,即使有结果,该函数也会返回0 rows.

要解决此问题,开发人员必须在执行查询之后、尝试使用 mysqli_stmt::num_rows 之前显式调用 mysqli_stmt::store_result()。下面是包含此必要步骤的更新代码片段:

if ($stmt = $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(); // Added this line
    $num_of_rows = $stmt->num_rows; 
    $stmt->bind_result($child_id, $child_title, $child_visible, $child_parent);

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

    echo($num_of_rows);

    $stmt->close();
}

通过合并 mysqli_stmt::store_result(),MySQL 服务器被指示将结果集存储在客户端内存中,使其可用于后续处理。这确保了 mysqli_stmt::num_rows 可以准确计算存储结果集中的行数,返回正确的值。

结论

理解的重要性使用 mysqli_stmt::num_rows 时的 mysqli_stmt::store_result() 对于开发人员来说至关重要使用 MySQL 数据库。通过显式调用 mysqli_stmt::store_result(),开发人员可以确保获得准确的行计数,从而使他们能够有效且高效地处理数据库数据。

以上是为什么 mysqli_stmt::num_rows 返回 0,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

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