有没有办法在php和mysqli中使用SELECT FOUND_ROWS()?

时间:2019-07-10 03:04:51

标签: php mysqli

我正在尝试在我的网站中实现分页系统,并且无法解决这个顽固的错误。我不确定是否可以在mysqli中使用FOUND_ROWS()而不是PDO,但这就是我来的目的。

我拥有最新版本的PHP,到目前为止,在分页中一切正常。

EXPLAIN SELECT SQL_NO_CACHE * FROM Table_A WHERE id = 1;

(到目前为止)应该发生的事情是mysql将对匹配查询中找到的行进行计数,我可以从那里继续进行工作。

这是我当前的错误:

致命错误:未捕获错误:在bool上调用成员函数mysqli_fetch_array()

3 个答案:

答案 0 :(得分:1)

当然有,但是您必须遵循适当的例程

您当前的查询没有意义,因为它计算了存储在$ rLim中的已知数字(虽然不总是这样,但这不是重点)。

要使用FOUND_ROWS()进行分页,必须在要获取单个页面数据的查询中添加SQL_CALC_FOUND_ROWS

然后,您可以通过使用FOUND_ROWS()运行另一个查询来获得无限制的总行数。

也就是说,不建议使用SQL_CALC_FOUND_ROWS,因为它与没有限制地获取所有行一样慢。这就是最近不推荐使用该功能的原因。

因此,您必须进行两个查询,一个查询使用LIMIT子句获取实际数据,另一个查询使用count(*)而不使用LIMIT。

答案 1 :(得分:0)

您已经有了计数查询,只需获取该值即可。无需再次查询FOUND_ROWS()

$stmt = $conn->prepare('SELECT count(*) FROM owned_assets WHERE uid=? AND type=?');
$stmt->bind_param('ii', $uid, $assetType);
$stmt->execute();
$result = $stmt->get_result();
$total = $result->fetch_assoc();
echo $total['count(*)'];

旁注:您可以在查询中为count(*) AS total使用别名,并在返回值中以$total['total']的形式访问索引。

答案 2 :(得分:-1)

您不需要其他查询来获取总行数,因为COUNT()已经有了它。您可以使用 bind_result():

将第一个查询的结果绑定到$total
$stmt->bind_result($total);