【发布时间】:2016-11-23 23:28:21
【问题描述】:
任何人都知道为什么会发生这种情况
$stmt = $this->prepare($this->sql);
$exec = $stmt->execute($this->bindings);
// The below returns an empty array()
return $exec->fetchAll(PDO::FETCH_OBJ);
// This however will return rows if looped.
return $exec->fetch(PDO::FETCH_OBJ);
更奇怪的是,这仅发生在我们数据库中的某些 ID 范围内,例如,如果您搜索有关产品 ID 为 552 的项目的各种信息,上面的代码与 fetchAll() 一起工作没问题,但将其更改为553 并且它失败(空数组)。 554 然后再次工作。项目之间的数据库中的数据几乎没有差异(都只是整数和时间戳[地理位置数据])。
【问题讨论】:
-
添加一些调试:在执行后检查 $stmt 的行数。如果完全失败,则 fetch/fetchall 返回布尔值 false。如果没有结果(但结果句柄有效),您将得到一个空数组。所以最有可能 fetch/fetchall 工作正常,而且它的查询不知何故没有找到任何东西。
-
rowCount 返回 23,columnCount 返回 2。fetch 和 fetchAll 都不返回 false。在命令行中执行原始 sql 命令(从准备好的 stmt 模拟)可以正常工作。
-
啊,重新启动我们的服务器并停止并重新启动 MySQL,它现在正在工作。奇怪的问题。