Я прочитал этот поток: Проблемы увеличивают поле в MySQL / PHP с помощью подготовленных операторов, но не видели ответа на мою проблему.
PDOStatement Object ( [queryString] => UPDATE user_alerts SET notif = ? + 2 WHERE ( user_id = ? ) ) $stmt->execute( array( 'notif', '1' ) );
Насколько я могу судить, все это правильно.
Когда выполняется вышеуказанный код, он устанавливает столбец notif равным 2 независимо от значения столбца notif. Это как если бы SQL читал как SET notif = 2
вместо SET notif = notif + 2
Я не смог понять это и очень ценю помощь!
$sql = 'UPDATE user_alerts SET notif = notif + 2 WHERE ( user_id = :userid )'; $prepStatement = $pdo->prepare( $sql ); $prepStatement->execute(array(':userid' => $userid));
Вы не можете привязать имя столбца к подготовленному оператору.
Использование параметров – это не просто замена текста. Вы не можете заменить имя столбца параметром. MySQL будет интерпретировать ваш запрос так, как если бы вы написали это:
UPDATE user_alerts SET notif = 'notif' + 2 WHERE ( user_id = ? )
Строка 'notif'
преобразуется в ноль для добавления.
Вместо этого попробуйте этот запрос:
UPDATE user_alerts SET notif = notif + 2 WHERE ( user_id = ? )