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();
}
UPDATE
est incorrecteWHERE
pour cibler votre ligne spécifiqueChangement
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
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.
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";