2011-11-27 10 views
3

私はこのスレッドを読んでいます:Issues incrementing a field in MySQL/PHP with prepared statementsしかし、私の問題の答えは見えませんでした。PDO Prepared Statementを使用して列の値を増やす

PDOStatement Object 
(

    [queryString] => UPDATE user_alerts SET notif = ? + 2 WHERE (user_id = ?) 

) 

$stmt->execute(array('notif', '1')); 

私が知る限り、これはすべて正しいです。

上記のコードを実行すると、notifカラムの値に関係なくnotifカラムが2に設定されます。 SQLがSET notif = notif + 2の代わりにSET notif = 2のように読んでいるのと同じです。

私はそれを理解することができず、本当に助けになります!

答えて

3
$sql = 'UPDATE user_alerts SET notif = notif + 2 WHERE (user_id = :userid)'; 
$prepStatement = $pdo->prepare($sql); 
$prepStatement->execute(array(':userid' => $userid)); 

6

パラメータの使用は単なるテキストの置換ではありません。列名はパラメータで置き換えることはできません。あなたが書かれたかのようにMySQLがクエリを解釈します。この:

UPDATE user_alerts SET notif = 'notif' + 2 WHERE (user_id = ?) 

'notif'はさらにゼロに変換される文字列。

は、代わりにこの文字列で検索してください:あなたが準備されたステートメントに列名をバインドすることはできません

UPDATE user_alerts SET notif = notif + 2 WHERE (user_id = ?) 
関連する問題