【发布时间】:2016-03-09 20:41:18
【问题描述】:
我们有一个以前在 PHP 5.4 下运行的 laravel 4.1 应用程序,但是自从升级到 5.6.13(今天升级到 5.6.14)后,我注意到查询开始有时会返回 0 来表示 FOUND_ROWS()。在我们的一些查询中,它似乎是断断续续的,但在其他查询中,它更像是一个永久性问题。
受影响最大的集合是带有子查询的集合。
我们正在使用 PDO(我们没有使用 laravel 模型,只是直接与其 PDO 对象交互)。 MySQL 在这个时间范围内也没有被修改过。
尝试了各种方法 - 一个建议是将跟踪模式设置为 0,但这并没有帮助。我尝试将 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 设置为 false,但是当您尝试选择 FOUND_ROWS() 时会导致 PDO 错误(现在无法获得确切的消息)。
没有回滚到 5.4(请上帝不要),我完全被卡住了......
直接在 MySQL 中运行这些查询,然后运行FOUND_ROWS()总是返回正确的结果。
【问题讨论】:
-
PDO 对象是否返回正确数量的实际数据行,例如,您要求返回用户数,它说
FOUND_ROWS()0 个用户,但返回 4 个数据行,用于 4 个不同用户? -
其他一切正常 - 如果我的查询有 45 个结果,我会得到前 30 个(从限制中),然后运行找到的行并返回 0。
-
你能用相关代码编辑你的问题吗?
-
并非如此,因为这种情况发生在多个查询中,并且仅在一种环境中 - 它也是间歇性的,有时也有效(所以我知道查询不是问题)。直接使用 MySQL 时也可以正常工作。
-
我们需要查看代码。 Laravel 具有允许“事件”触发和执行的内部机制,可能是在您完成查询后,PDO 对象被更改,随后对您需要的调用丢失。你能隔离重现代码和环境吗? “有时有效,有时无效”不足以进行任何类型的调试,您必须隔离并能够重复返回错误结果的情况。
标签: php mysql pdo laravel-4 sql-calc-found-rows