-2

我目前正在使用 PHP 和 MySQL 开发一个审计网络应用程序。该应用程序是使用 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 方法()之外运行。

对此问题的任何澄清将不胜感激。

4

1 回答 1

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(或更高版本),您的原始语法是有效的。

希望有帮助。

于 2013-07-18T11:49:33.723 回答