22

我试图只用 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();
}
4

3 回答 3

64
  1. 你的UPDATE语法错误
  2. 您可能打算更新一行而不是全部更新,因此您必须使用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 
于 2013-08-19T21:09:04.293 回答
5

这与使用 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。优点是更容易将列与正确的参数匹配。

于 2013-08-19T21:09:06.183 回答
3

您的更新语法不正确。请检查更新语法以获取正确的语法。

$sql = "UPDATE `access_users` set `contact_first_name` = :firstname,  `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone";
于 2013-08-19T21:08:24.580 回答