Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP PDO-使用准备好的语句会导致服务器错误_Php_Mysql_Pdo - Fatal编程技术网

PHP PDO-使用准备好的语句会导致服务器错误

PHP PDO-使用准备好的语句会导致服务器错误,php,mysql,pdo,Php,Mysql,Pdo,我有一个PHP网站,我花了一些时间使用XAMPP localhost环境开发。当我在本地测试它时,它工作得很好,但不幸的是,当我尝试在我租用的web服务器空间上运行它时,情况并非如此 当我上传完成的网站并尝试访问它时,我收到了“服务器错误500”的回复,经过几个小时的错误查找,我已经查明了错误的原因。事实证明,执行prepared语句会导致服务器错误,我不知道为什么。以下代码将导致服务器错误: try {$db = new PDO("mysql:host=hostname;dbname=dbna

我有一个PHP网站,我花了一些时间使用XAMPP localhost环境开发。当我在本地测试它时,它工作得很好,但不幸的是,当我尝试在我租用的web服务器空间上运行它时,情况并非如此

当我上传完成的网站并尝试访问它时,我收到了“服务器错误500”的回复,经过几个小时的错误查找,我已经查明了错误的原因。事实证明,执行prepared语句会导致服务器错误,我不知道为什么。以下代码将导致服务器错误:

try {$db = new PDO("mysql:host=hostname;dbname=dbname", "username", "password");}
catch(PDOException $e) {echo $e->getMessage();}
$temp = $db->prepare("SELECT * FROM users WHERE username=?");
$temp->execute(["theusername"]);  //It's this line that causes the error.
下面的代码执行相同的操作,但没有准备好的语句;它可以在web主机上正常工作:

try {$db = new PDO("mysql:host=hostname;dbname=dbname", "username", "password");}
catch(PDOException $e) {echo $e->getMessage();}
$temp = $db->query("SELECT * FROM users WHERE username='username'");
当使用XAMPP在本地运行时,它们都可以正常工作。如果我尝试使用预先准备好的语句,有人知道为什么web主机会给我服务器错误吗

编辑:


如果您更改为:

$temp->execute(array("theusername"));

这可能会解决问题。

如@chris85所述,如果您改为:

$temp->execute(array("theusername"));

这可能会解决问题。

-并检查日志。您还需要将可执行文件放入try/catch中。您的托管提供商是否安装了PDO模块?检查phpinfo()输出。是否运行PHP<5.4?如果没有错误,很难调试,但可能不支持速记数组表示法。@Fred-ii-。“我不认为你是对的,那样做很好。”我只是纠正了一些人。这毕竟是PHP版本。很高兴看到问题解决了。编辑:我删除了关于使用准备好的声明的评论。-并检查您的日志。您还需要将可执行文件放入try/catch中。您的托管提供商是否安装了PDO模块?检查phpinfo()输出。是否运行PHP<5.4?如果没有错误,很难调试,但可能不支持速记数组表示法。@Fred-ii-。“我不认为你是对的,那样做很好。”我只是纠正了一些人。这毕竟是PHP版本。很高兴看到问题解决了。编辑:我删除了关于使用准备好的语句的评论。简要说明:简短的数组语法,即
['something']
而不是
array('something')
。对于PHP5.3及以下版本
执行([“theusername”])只是一个语法错误。简要说明:使用了短数组语法,即
['something']
而不是
数组('something')
。对于PHP5.3及以下版本
执行([“theusername”])只是一个语法错误。