我已经读过这个帖子:Issues incrementing a field in MySQL/PHP with prepared statements但是没有看到我的问题的答案。
PDOStatement Object
(
[queryString] => UPDATE user_alerts SET notif = ? + 2 WHERE ( user_id = ? )
)
$stmt->execute( array( 'notif', '1' ) );
据我所知,这一切都是正确的。
当执行上面的代码时,无论notif列的值是什么,它都将notif列设置为2。就好像SQL的读取时间为SET notif = 2
而不是SET notif = notif + 2
我一直无法理解,真的很感激帮助!
答案 0 :(得分:6)
使用参数不仅仅是简单的文本替换。您无法使用参数替换列名称。 MySQL会像你写的那样解释你的查询:
UPDATE user_alerts SET notif = 'notif' + 2 WHERE ( user_id = ? )
将字符串'notif'
转换为零以进行添加。
请尝试此查询:
UPDATE user_alerts SET notif = notif + 2 WHERE ( user_id = ? )
答案 1 :(得分:4)
$sql = 'UPDATE user_alerts SET notif = notif + 2 WHERE ( user_id = :userid )';
$prepStatement = $pdo->prepare( $sql );
$prepStatement->execute(array(':userid' => $userid));
您无法将列名绑定到预准备语句。