我SQL_CALC_FOUND_ROWS在Mysql SELECT语句中使用,以获得没有LIMIT子句的SELECT返回的行数。
SQL_CALC_FOUND_ROWS
$sql = new mysqli('localhost', 'root', ''); $sql->select_db('mysql'); $s1 = $sql->query('select SQL_CALC_FOUND_ROWS * from db limit 0, 3'); $s2 = $sql->query('select FOUND_ROWS()'); if($row = $s2->fetch_row()) printf('%d/%d', $s1->num_rows, $row[0]);
在我的WinXP开发站上,它在几周内每次都返回3/0。当我从工作站使用另一个MySQL服务器时,它也返回3/0。在另一台PC上,相同的代码运行良好,并返回正确的数字(例如,如果我在mysql.db表中有17条记录,则返回3/17)。每台XP PC都具有相同的PHP / Mysql版本,过去在我的PC上运行良好,并且使用Mysql Query Browser和相同的SQL查询,我得到了正确的编号。
有人可以在不重新安装全部的情况下给我解决方案的想法吗?
抱歉,我之前的要求非常不清楚。
谢谢。
当我在mysql命令行上运行与您的示例类似的内容时,它将起作用。但是从php运行它失败。第二个查询必须“知道”第一个查询,因此我认为以某种方式将链接两个查询的持久性/内存弄乱了。
(事实证明Wordpress使用这种类型的查询进行分页-因此,我们更大的问题是当我们移至php 5.2.6时,wordpress安装中的分页突然停止了工作…最终将其跟踪到FOUND_ROWS( ))。
只是为了发布以便将来可能会遇到此问题的人发布…对我来说,它是php设置“ mysql.trace_mode”-在5.2.6中默认为“ on”,而不是以前的“ off”,并且由于某种原因使FOUND_ROWS()无法正常工作。
作为一个“修复”,我们可以将其放在每个php页面中(实际上,在一个通用的“ include”中):
ini_set("mysql.trace_mode", "0");
或将其添加到.htaccess:
php_value mysql.trace_mode "0"
再次感谢,杰里