PDOStatement :: fetch导致500内部服务器错误

时间:2013-07-18 11:03:11

标签: php mysql pdo

我目前正在使用PHP和MySQL开发一个审核Web应用程序。该应用程序是使用XAMPP在本地开发的,没有任何问题。然而,在将其部署到我的主机服务器之后,使用PDO访问数据库的一个php文件开始生成500内部服务器错误。经过一些调试后,发现fetch()函数是源。

// works
$sql="INSERT INTO subsection (section_id) VALUES (:section_id)";

$query=$db->prepare($sql);
$query->execute(array(':section_id'=>$section_id));


// doesn't work
$sql="SELECT audit_id FROM audit
WHERE audit_id < :audit_id
ORDER BY audit_id DESC LIMIT 1";

$query=$db->prepare($sql);
$query->execute(array(':audit_id'=>$audit_id));

$prevAuditId=$query->fetch()[0]; // <-- error generated here

phpinfo()显示主机的服务器正在运行PHP版本5.33并且启用了PDO支持。总而言之,Web应用程序在XAMPP安装上本地工作,当托管PDO似乎起作用时,除了fetch方法()。

非常感谢对此问题的任何澄清。

1 个答案:

答案 0 :(得分:2)

问题在于您使用的是PHP 5.3,但您使用的数组解除引用语法仅允许从PHP 5.4开始使用。

这是你的代码:

$prevAuditId=$query->fetch()[0];

问题与PDO调用无关,它是由最后的[0]引起的。

从这样的函数调用中获取数组元素称为“解除引用”数组。 PHP 5.3不支持此功能。如果你需要坚持使用PHP 5.3,你必须将它分成两行:

$auditRecord=$query->fetch();
$prevAuditId=$auditRecord[0];

或者,您可以将服务器升级到PHP 5.4(或更高版本),原始语法有效。

希望有所帮助。

相关问题