【发布时间】:2015-12-03 17:34:50
【问题描述】:
// 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]: 语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 ':customerId 附近使用正确的语法) AND (title=:campaignTitle) AND (description=:campaignDescription) A' 在 E:\coding\Web 的第 1 行 Development\Xampp\htdocs\api\addCampaign.php:42 堆栈跟踪:#0 E:\coding\Web Development\Xampp\htdocs\api\addCampaign.php(42): PDO->query('SELECT campaign...') #1 {main} 在 E:\coding\Web 中抛出 Development\Xampp\htdocs\api\addCampaign.php 在第 42 行
但我不明白为什么
[更新]对于那些想看DatabaseCommand()代码的人来说,差不多就是这样。
function DatabaseCommand($sqlCommand)
{
$result = $sqlCommand->execute();
return $result;
}
还有一些额外的代码,但只是记录调试 porpoise 的命令、检查错误、记录错误、捕获异常并通过电子邮件发送给我。
【问题讨论】:
-
语法看起来不错,所以很可能是访问冲突。确保您对该数据库/表拥有所需的
read权限。 -
Parenethis 不是必需的。你也可以发布 DatabaseCommand() 方法吗?查询如下所示:“从活动中选择活动 ID=:客户 ID AND 标题=:活动标题 AND 描述=:活动描述和开始时间=:开始时间标记和结束时间=:结束时间标记”。使用第一个括号,查询正在执行 where (not set) = (condition=value)
-
什么是
DatabaseCommand()?它有什么作用?此命令不是标准 PDO afaik 的一部分。 -
我将在 8 或 10 小时后下班后发布代码(问题是在离开家之前发布的)。我只能说该函数对先前的查询有效,因此这似乎不太可能是问题 - 但让我们等到您看到代码再决定。感谢您的反馈
-
@Mawg 我敢打赌,您之前使用的查询当时不是准备好的语句。您在
DatabaseCommand()函数中使用PDO->query(),这可以从您发布的堆栈跟踪中读出。PDO->query()不适用于准备好的语句,您需要使用PDO->execute()