Обновление запроса с помощью 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 неверен
  • Вероятно, вы решили обновить строку не для всех, поэтому вам нужно использовать предложение 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 

Ответ 2

Это не имеет никакого отношения к использованию 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. Преимущество состоит в том, что легче сопоставить столбцы с правильными параметрами.

Ответ 3

Синтаксис обновления неверен. Пожалуйста, проверьте Обновить синтаксис для правильного синтаксиса.

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