繁体   English   中英

我的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);

结果是

致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误; 查看与您的MySQL服务器版本相对应的手册,以便在':customerId)和(title =:campaignTitle)之间使用正确的语法AND(description =:campaignDescription)E:\\ coding \\ Web Development中的'第1行' Xampp \\ htdocs \\ api \\ addCampaign.php:42堆栈跟踪:#0 E:\\ coding \\ Web Development \\ Xampp \\ htdocs \\ api \\ addCampaign.php(42):PDO-> query('SELECT campaign ...')在第42行的E:\\ coding \\ Web Development \\ Xampp \\ htdocs \\ api \\ addCampaign.php中抛出#1 {main}

但我不明白为什么


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

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

还有一些额外的代码,但只记录调试porpoises的命令,检查错误,记录错误,捕获异常并通过电子邮件发送给我。

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

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

$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()。 当然,您必须检查正在执行的实际文件。

我将借此机会将所有发烧友程序员的注意力转移到阅读错误消息的极端帮助上。 尽管有着共同的信念,但这不仅仅是一种责备,而是“你做错了什么!”,让你猜测原因,但要精确而详细的解释。 它只需要读取错误消息以获得线索。

我还将借此机会将所有发烧友程序员的注意力指向这样一个事实,即如果使用仅回显错误消息的常见做法,将堆栈跟踪留在后面,则会省略关于错误的真正原因的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM