Обновление запроса с помощью 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";