我正在尝试在我的网站中实现分页系统,并且无法解决这个顽固的错误。我不确定是否可以在mysqli中使用FOUND_ROWS()而不是PDO,但这就是我来的目的。
我拥有最新版本的PHP,到目前为止,在分页中一切正常。
EXPLAIN SELECT SQL_NO_CACHE * FROM Table_A WHERE id = 1;
(到目前为止)应该发生的事情是mysql将对匹配查询中找到的行进行计数,我可以从那里继续进行工作。
这是我当前的错误:
致命错误:未捕获错误:在bool上调用成员函数mysqli_fetch_array()
答案 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)