mysql发生了一些奇怪的事情

Eli*_*aez -3 php mysql pdo

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

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

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

我错过了什么吗?

Fun*_*ner 5

你正在使用两个保留字,rightvalues

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

$query=("UPDATE `values` SET max=max+$value, `right`=`right`+$value WHERE 
     id IN ($placement_id)";
Run Code Online (Sandbox Code Playgroud)

但是,max也可以在你身上耍花招,所以也可以用反引号来包装.这是一个聚合函数.

$query=("UPDATE `values` SET `max`=`max`+$value, `right`=`right`+$value WHERE 
     id IN ($placement_id)";
Run Code Online (Sandbox Code Playgroud)

错误报告,会发出错误信号:

error_reporting(E_ALL);
ini_set('display_errors', 1);
Run Code Online (Sandbox Code Playgroud)

因为看起来你正在使用PDO(并标记为这样):$pdo->$query($query);

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);在连接打开后立即添加.


旁注:您现在的代码对 SQL注入开放.使用准备好的语句,或与准备语句PDO.后者是你似乎用作MySQL API库的东西.


引用spencer7593评论:

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