Обновление запроса с помощью PDO и MySQL

Я пытаюсь написать запрос на обновление с помощью PDO, только я не могу выполнить мой код?

try { $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); $conn->exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "UPDATE `access_users` (`contact_first_name`,`contact_surname`,`contact_email`,`telephone`) VALUES (:firstname, :surname, :telephone, :email); "; $statement = $conn->prepare($sql); $statement->bindValue(":firstname", $firstname); $statement->bindValue(":surname", $surname); $statement->bindValue(":telephone", $telephone); $statement->bindValue(":email", $email); $count = $statement->execute(); $conn = null; // Disconnect } catch(PDOException $e) { echo $e->getMessage(); } 

  1. Неправильный синтаксис UPDATE
  2. Вероятно, вы планировали обновить строку не для всех, поэтому вам нужно использовать WHERE для таргетинга на определенную строку

+ Изменить

 UPDATE `access_users` (`contact_first_name`,`contact_surname`,`contact_email`,`telephone`) VALUES (:firstname, :surname, :telephone, :email) 

в

 UPDATE `access_users` SET `contact_first_name` = :firstname, `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone WHERE `user_id` = :user_id -- you probably have some sort of id 

Это не имеет никакого отношения к использованию PDO, просто вы вводите в заблуждение INSERT и UPDATE.

Вот разница:

  • INSERT создает новую строку. Я предполагаю, что вы действительно хотите создать новую строку.
  • UPDATE изменяет значения в существующей строке, но если это то, что вы делаете, вам, вероятно, следует использовать предложение WHERE, чтобы ограничить изменение определенной строкой, поскольку по умолчанию это относится к каждой строке.

Таким образом, это, вероятно, будет делать то, что вы хотите:

 $sql = "INSERT INTO `access_users` (`contact_first_name`,`contact_surname`,`contact_email`,`telephone`) VALUES (:firstname, :surname, :email, :telephone); "; 

Обратите внимание, что я также изменил порядок столбцов; порядок ваших столбцов должен соответствовать порядку значений в вашем предложении VALUES.

MySQL также поддерживает альтернативный синтаксис для INSERT:

 $sql = "INSERT INTO `access_users` SET `contact_first_name` = :firstname, `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone "; 

Этот альтернативный синтаксис выглядит скорее как оператор UPDATE, но создает новую строку, такую ​​как INSERT. Преимущество состоит в том, что легче сопоставить столбцы с правильными параметрами.

Ваш синтаксис обновления неверен. Проверьте правильность синтаксиса Update Syntax .

 $sql = "UPDATE `access_users` set `contact_first_name` = :firstname, `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone";