我试图用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();
}
答案 0 :(得分:57)
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
答案 1 :(得分:5)
这与使用PDO无关,只是你在混淆INSERT和UPDATE。
区别在于:
INSERT
创建一个新行。我猜你真的想要创建一个新行。UPDATE
更改现有行中的值,但如果您正在执行此操作,则可能应使用WHERE子句将更改限制为特定行,因为默认情况下它适用于< em>每个行。所以这可能会做你想要的:
$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这样的新行。优点是可以更容易地将列与正确的参数匹配。
答案 2 :(得分:3)
您的更新语法不正确。请检查Update Syntax以获取正确的语法。
$sql = "UPDATE `access_users` set `contact_first_name` = :firstname, `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone";