好的,所以我可能会遗漏一些东西,但我在php中构建一个查询。
$query=("UPDATE values SET max=max+$value, right=right+$value WHERE
id IN ($placement_id)";
$pdo->$query($query);
现在,当我检查数据库时会发生奇怪的事情。具有匹配ID的所有行都会更新最大列,但右列不会更新。我确保它们都是数据库中的int类型。
我错过了什么吗?
答案 0 :(得分:5)
您使用了两个保留字right
和values
用反引号包裹这些单词,或为表格和列选择不同的单词。
$query=("UPDATE `values` SET max=max+$value, `right`=`right`+$value WHERE
id IN ($placement_id)";
但是,max
也可能会对你起作用,所以也可以将其包含在反引号中。它是aggregate function。
$query=("UPDATE `values` SET `max`=`max`+$value, `right`=`right`+$value WHERE
id IN ($placement_id)";
启用error reporting后,会发出错误信号:
error_reporting(E_ALL);
ini_set('display_errors', 1);
由于您似乎正在使用PDO(以及tagged):$pdo->$query($query);
在打开连接后立即添加$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
。
旁注: 您现在的代码向SQL injection开放。使用prepared statements或PDO with prepared statements。后者是你似乎用作MySQL API库的。
从评论中引用spencer7593
:
"此外,在连接上设置
PDO::ERRMODE_EXCEPTION
将导致PDO抛出错误。 (这不是最合适的方法,我不建议在所有情况下使用。但是如果我们不打算编写代码来执行检查,看看语句是否成功,我们不会忽视MySQL错误,默认为PDO::ERRMODE_SILENT
"。