Использование подготовленного оператора PDO и увеличение значения столбца - PullRequest
4 голосов
/ 27 ноября 2011

Я читал эту ветку: Проблемы приращения поля в MySQL / PHP с подготовленными инструкциями , но не нашли ответа на мою проблему.

PDOStatement Object
(

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

)

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

Насколько я могу судить, все это правильно.

Когда вышеуказанный код выполняется, он устанавливает столбец уведомлений равным 2 независимо от значения столбца уведомлений. Это как если бы SQL читал как SET notif = 2 вместо SET notif = notif + 2

Я не смог понять это и был бы очень признателен за помощь!

Ответы [ 2 ]

6 голосов
/ 27 ноября 2011

Использование параметров - это не просто замена текста.Вы не можете заменить имя столбца параметром.MySQL будет интерпретировать ваш запрос так, как если бы вы написали следующее:

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

Строка 'notif' преобразуется в ноль для добавления.

Попробуйте вместо этого запрос:

UPDATE user_alerts SET notif = notif + 2 WHERE ( user_id = ? )   
4 голосов
/ 27 ноября 2011
$sql = 'UPDATE user_alerts SET notif = notif + 2 WHERE ( user_id = :userid )';
$prepStatement = $pdo->prepare( $sql );
$prepStatement->execute(array(':userid' => $userid));

Невозможно связать имя столбца с подготовленным оператором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...