使用PDO准备语句和增加列值

时间:2011-11-27 08:46:04

标签: php mysql pdo

我已经读过这个帖子: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

我一直无法理解,真的很感激帮助!

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));

您无法将列名绑定到预准备语句。