【问题标题】:Update query with PDO and MySQL使用 PDO 和 MySQL 更新查询
【发布时间】:2013-08-21 19:07:19
【问题描述】:

我正在尝试仅使用 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();
}

【问题讨论】:

标签: php mysql pdo


【解决方案1】:
  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 

【讨论】:

  • 这是一个伟大而简单的答案。另外,您是如何如此干净地自动格式化该 SQL 的?
  • @SWL 谢谢。在这种情况下,格式化是手动完成的,尽管某些 IDE 允许您设置格式化规则并为您执行自动格式化。
  • 我可以使用这个UPDATE `access_users` SET `contact_first_name` = :firstname, `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone WHERE `user_name` = :user_name用户名在会话中
【解决方案2】:

这与使用 PDO 无关,只是你混淆了 INSERT 和 UPDATE。

这就是区别:

  • INSERT 创建一个新行。我猜你真的想创建一个新行。
  • UPDATE 更改现有行中的值,但如果这是您正在做的事情,您可能应该使用 WHERE 子句将更改限制为特定行,因为默认情况下它适用于 every 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。优点是更容易将列与正确的参数匹配。

【讨论】:

    【解决方案3】:

    您的更新语法不正确。请检查Update Syntax 的语法是否正确。

    $sql = "UPDATE `access_users` set `contact_first_name` = :firstname,  `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 2015-09-01
      • 2017-10-14
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多