PDO->fetchAll() 在远程服务器上返回空数组
Posted
技术标签:
【中文标题】PDO->fetchAll() 在远程服务器上返回空数组【英文标题】:PDO->fetchAll() returns empty array on remote server 【发布时间】:2014-05-20 04:26:59 【问题描述】:基本上,在我的本地主机上一切正常。 这些是两种环境的 php 版本:
开发(本地主机):5.5.3
生产:5.3.27
我一直在寻找一个兼容性问题,但没有运气,这是我最后的手段。
在开发中返回请求数据但在生产中不返回的代码 sn-p:
function dbq($query, $array = array())
$core = Core::getInstance();
$STH = $core->dbh->prepare($query);
$sth = $STH->execute($array);
$res = $STH->fetchAll(PDO::FETCH_OBJ);
print_r($res);
之前已成功建立连接,因此没有问题。 正如我之前所说的,'$res' 在生产环境中返回空数组。
该函数被其他函数调用,例如:
function first()
return $this->dbq("SELECT * FROM $this->class
ORDER BY id ASC LIMIT 1");
注意:第二个参数用于准备好的语句,并不总是必需的。
【问题讨论】:
-1 表示第二个函数,它很容易被注入并破坏 PDO 准备语句的想法 为什么要设置 PDO::FETCH_OBJ 两次?你确定一次还不够吗? 我听到了您的担忧,但此功能不受用户输入的影响。 (用户永远无法给这个函数添加参数) 一个人永远无法分辨哪些会受到影响,哪些不会。一些项目不断增长,直到更多的开发人员加入,一个人无法控制他们的行为。这样的功能必须是防错的,没有任何沉默的考虑 公平点。会得到它。仍然没有关于我真正问题的实际信息:/ 【参考方案1】:您可以使用$STH->debugDumpParams()
调试您的语句。 (documentation)
编辑:问题是由于 mysql 列名区分大小写或不区分大小写,具体取决于操作系统。 (reference)
【讨论】:
非常感谢你,我什至没有想到它会在旧版本中逃脱:) 随心所欲地调用它,'$this->class' 硬编码确实有问题,它解决了我的问题,得想办法解决。 有趣。因此,由于某种原因,较旧的 PHP 没有将$this->class
识别为类属性。您可以尝试$this->class
或字符串连接。
不,找到了真正的问题...为混乱道歉...似乎较新版本的 php 或 mysql(不完全确定哪个)不会对区分大小写大惊小怪。看起来 $this->class 正在返回一个大写的类(用户),而表是小写的(用户)。很抱歉给您带来不便,再次感谢您部分帮助我解决问题:)【参考方案2】:
你是大写/小写错误:
$STH = $core->dbh->prepare($query);
$sth = $STH->execute($array);
$sth 和 $STH 不一样
【讨论】:
感谢您的帮助,我的问题已经解决了,我的代码中也解决了这个问题 :) 谢谢您的意见!以上是关于PDO->fetchAll() 在远程服务器上返回空数组的主要内容,如果未能解决你的问题,请参考以下文章