web-dev-qa-db-fra.com

Mettre à jour la requête avec PDO et MySQL

Im essayant d'écrire une requête de mise à jour avec PDO seulement je ne peux pas obtenir mon code à exécuter?

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();
}
21
Liam
  1. Votre syntaxe UPDATE est incorrecte
  2. Vous vouliez probablement mettre à jour une ligne pas toutes, vous devez donc utiliser la clause WHERE pour cibler votre ligne spécifique

Changement

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 
59
peterm

Cela n'a rien à voir avec l'utilisation de PDO, c'est juste que vous confondez INSERT et UPDATE.

Voici la différence:

  • INSERT crée une nouvelle ligne. Je suppose que vous voulez vraiment créer une nouvelle ligne.
  • UPDATE modifie les valeurs d'une ligne existante, mais si c'est ce que vous faites, vous devriez probablement utiliser une clause WHERE pour limiter la modification à une ligne spécifique, car la valeur par défaut est qu'elle s'applique à chaque ligne.

Donc, cela fera probablement ce que vous voulez:

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

Notez que j'ai également changé l'ordre des colonnes; l'ordre de vos colonnes doit correspondre à l'ordre des valeurs dans votre clause VALUES.

MySQL prend également en charge une syntaxe alternative pour INSERT:

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

Cette syntaxe alternative ressemble un peu plus à une instruction UPDATE, mais elle crée une nouvelle ligne comme INSERT. L'avantage est qu'il est plus facile de faire correspondre les colonnes aux paramètres corrects.

5
Bill Karwin

Votre syntaxe de mise à jour est incorrecte. Veuillez vérifier pdate Syntax pour la syntaxe correcte.

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