Я пытаюсь написать запрос на обновление с помощью 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(); }
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
Это не имеет никакого отношения к использованию 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";