我的SQL看起来像一个问题。我试图通过文档环顾四周,似乎无法找到我的错误。语法错误或访问冲突:1064
继承人的错误:
[11军2014年17点56分46秒]警告:[池WWW]儿童12509说成标准错误:“注意:PHP消息:PHP致命错误:未捕获的异常“PDOException '信息'SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以找到在'END WHERE id IN()'附近使用的正确语法。在/var/www/html/output.php:53“
我应该补充说,该代码的工作原理是...只有当我尝试添加以下$options
错误出现:
$options = array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
,代码:
# Also prepare SQL for update below
$sql = "UPDATE `headlines` SET views = CASE id ";
foreach ($headlines as $headline) {
$id = $headline['id'];
$sql .= sprintf("WHEN %d THEN views + 1 ", $id);
}
# Update views
$placeholders = rtrim(str_repeat('?, ', count($ids)), ', ');
$sql .= "END WHERE id IN ($placeholders)";
$q = $db->prepare($sql);
$q->execute($ids);
生成的查询:
UPDATE `headlines` SET views = CASE id WHEN 1364 THEN views + 1 WHEN 1365 THEN views + 1 WHEN 1366 THEN views + 1 END WHERE id IN (?, ?, ?)
它也有可能它可能是空的,像这样的:
UPDATE `headlines` SET views = CASE id END WHERE id IN()
告诉我们生成的查询。 –
我更新了我的问题。 – Tallboy
尝试像这样'CASE WHEN id = 1364 THEN views + 1 WHEN id = 1365 ...' – Mihai