fetchAll()返回空数组,使用fetch()循环获取所有结果

时间:2016-07-20 16:37:34

标签: php mysql pdo

任何人都知道为什么会发生这种情况

$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然后再次工作。项目之间数据库中的数据几乎没有差异(它只是整数和时间戳[地理位置数据])。

1 个答案:

答案 0 :(得分:0)

我想今晚早些时候我的服务器再次打嗝,我会在这里回复一个答案。原来这是前一组项目数据之间的字符编码问题(我实际上不知道它以前是什么编码)和我们的项目表现在使用的更新的utf-8编码。 PHP被挂在几个没有很好转换的字符上(一些边缘情况和奇数字符),而PHP正反过来返回一个有效的数组,但是json_encode无法处理并且会使脚本崩溃并且无声在我们的jQuery客户端实现和我们自己的错误检查php后端失败(奇怪)(更奇怪,需要更多的调查,但这不在本问题的范围内)。

我的解决方案是直接从API和项目架构将数据重新复制到新编码,这些编码本身在utf-8中开始,因此无需担心交叉编码问题。经过一小部分测试,这个问题似乎终于被搁置了。 :)