2013-07-18 148 views
-3

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

// 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除了获取方法()之外似乎可以正常工作。

任何关于这个问题的澄清将不胜感激。

+1

你怎么知道'$ query'运行成功?换一种说法 - 你的错误检查逻辑在哪里? –

+2

500状态码意味着您的脚本出现错误,但您尚未配置PHP以显示错误消息。当然,您不希望在生产服务器中启用该功能,但需要确保记录了错误,然后查看日志以获取详细信息。其他一切只是猜测。 –

回答

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(或更高版本),在那里你原来的语法是有效的。

希望有所帮助。

相关问题