我的PDO声明有什么问题?


What's wrong with my PDO statement?

// Check for existence - don't add a duplicate
$sqlQuery = $pdo->prepare('SELECT campaign_id FROM campaigns WHERE (customer_id=:customerId) AND (title=:campaignTitle) AND (description=:campaignDescription) AND (start_time=:startTimeStamp) AND (end_time=:endTimeStamp)');
$sqlQuery->bindParam(':customerId', $customerId);  // , PDO::PARAM_INT
$sqlQuery->bindParam(':campaignTitle', $campaignTitle);
$sqlQuery->bindParam(':campaignDescription', $campaignDescription);
$sqlQuery->bindParam(':startTimeStamp', $campaignTitle);
$sqlQuery->bindParam(':endTimeStamp', $endTimeStamp);
$sqlResult = DatabaseCommand($sqlQuery);

导致

致命错误:未捕获的异常'PDOException'带有消息'SQLSTATE[42000]: Syntax error or access violation: 1064SQL语法错误;请查阅与您的产品相对应的手册MySQL服务器版本的正确语法使用near ':customerId)AND (title=:campaignTitle) AND (description=:campaignDescription) A'在E:'coding'Web'Xampp'htdocs'api'addCampaign.php:42栈跟踪:#0E: '编码' Web开发' Xampp '根' api ' addCampaign.php (42):PDO->query('SELECT campaign…')#1 {main}抛出在E:'coding'Web开发'Xampp'htdocs'api'addCampaign.php第42行

但我不明白为什么


[更新]对于那些想要查看DatabaseCommand()代码的人来说,这几乎就是它了。

function DatabaseCommand($sqlCommand)
{
   $result = $sqlCommand->execute();
   return $result;
}

有一些额外的代码,但这只是记录调试海豚的命令,检查错误,记录那些,捕获异常&;电子邮件我。

update: 似乎这不是解决方案,只提高可读性

=和参数之间加一个空格:

$sqlQuery = $pdo->prepare('SELECT campaign_id FROM campaigns WHERE (customer_id= :customerId) AND (title= :campaignTitle) AND (description= :campaignDescription) AND (start_time= :startTimeStamp) AND (end_time= :endTimeStamp)');

您张贴在这里的代码与您得到的错误消息无关。

您必须检查addCampaign.php文件,第42行,您正在使用query()方法而不是execute()。当然,你必须检查正在执行的实际文件

我将借此机会引导所有热心的程序员注意阅读错误消息的极大帮助。尽管大家都这么认为,但它并不是一种责备,"你做错了什么!",让你去猜测原因,而是精确而详细的解释。并且只需要读取错误消息就可以获得线索。

我还想借此机会让所有热心的程序员注意到这样一个事实:如果使用只回显错误消息的常见做法,留下堆栈跟踪,则忽略了有关错误真正原因的信息。