mysql发生了一些奇怪的事
好吧,所以我可能会丢失一些东西,但我在PHP中建立一个查询。mysql发生了一些奇怪的事
$query=("UPDATE values SET max=max+$value, right=right+$value WHERE
id IN ($placement_id)";
$pdo->$query($query);
现在,奇怪的事情发生时,我检查数据库。所有具有匹配ID的行都会更新最大列,但右列不会。我确信它们都是数据库中的int类型。
我错过了什么吗?
您正在使用两个保留字,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上,会指示的错误:因为好像你正在使用PDO
error_reporting(E_ALL);
ini_set('display_errors', 1);
(和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
“。
非常感谢。我不能相信我错过了这一点。 – 2014-08-28 20:06:15
@EliasBaez不客气。 – 2014-08-28 20:06:35
+1此外,在连接上设置**'PDO :: ERRMODE_EXCEPTION' **将导致PDO抛出错误。 (这不是最合适的方法,我不会在所有情况下都推荐这种方法。但是如果我们不打算编写代码来执行检查,为了查看语句是否成功,我们将使用默认的** PDO :: ERRMODE_SILENT **来忽略MySQL错误。 – spencer7593 2014-08-28 20:07:00
[ **'RIGHT' **](HTTP://dev.mysql。 com/doc/refman/5.6/en/reserved-words.html)是mysql中的保留关键字,您需要在您的列周围备份ticks – 2014-08-28 19:55:39
... as [[values]](http://dev.mysql.com /doc/refman/5.6/en/reserved-words.html) – 2014-08-28 19:56:36
我认为这个查询应该抛出一个错误,而不是修改任何列的内容。看起来你完全错过了代码易受SQL注入攻击的想法。 – spencer7593 2014-08-28 20:01:32