mysql发生了一些奇怪的事情

时间:2014-08-28 19:52:50

标签: php mysql pdo

好的,所以我可能会遗漏一些东西,但我在php中构建一个查询。

$query=("UPDATE values SET max=max+$value, right=right+$value WHERE 
         id IN ($placement_id)";
$pdo->$query($query);

现在,当我检查数据库时会发生奇怪的事情。具有匹配ID的所有行都会更新最大列,但右列不会更新。我确保它们都是数据库中的int类型。

我错过了什么吗?

1 个答案:

答案 0 :(得分:5)

您使用了两个保留字rightvalues

用反引号包裹这些单词,或为表格和列选择不同的单词。

$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 statementsPDO with prepared statements。后者是你似乎用作MySQL API库的。


从评论中引用spencer7593

  

"此外,在连接上设置PDO::ERRMODE_EXCEPTION将导致PDO抛出错误。 (这不是最合适的方法,我不建议在所有情况下使用。但是如果我们不打算编写代码来执行检查,看看语句是否成功,我们不会忽视MySQL错误,默认为PDO::ERRMODE_SILENT"。