我目前正在使用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方法()。
非常感谢对此问题的任何澄清。
答案 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(或更高版本),原始语法有效。
希望有所帮助。