Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用PDO和MySQL更新查询_Php_Mysql_Pdo - Fatal编程技术网

Php 使用PDO和MySQL更新查询

Php 使用PDO和MySQL更新查询,php,mysql,pdo,Php,Mysql,Pdo,我试图用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

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

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

$sql = "UPDATE `access_users` set `contact_first_name` = :firstname,  `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone";
  • 您的
    更新
    语法错误
  • 您可能想更新一行而不是全部行,因此必须使用
    WHERE
    子句来针对特定行
  • 改变

    更新“访问用户”
    (`contact\u first\u name`、`contact\u姓氏`、`contact\u email`、`telephone`)
    值(:名字,:姓氏,:电话,:电子邮件)
    

    更新“访问用户”
    设置'contact\u first\u name`=:firstname,
    `联系人:姓`=:姓,
    `联系方式_email`=:email,
    `电话`=:电话
    其中`user\u id`=:user\u id--您可能有某种id
    
    这与使用PDO无关,只是您混淆了插入和更新

    区别在于:

    • 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的语法:这是一个非常简单的答案。另外,您是如何如此清晰地自动格式化SQL的?@SWL谢谢。在这种情况下,格式化是手动完成的,尽管某些IDE允许您设置格式化规则并为您执行自动格式化。我是否可以使用此
    更新`access\u users`set`contact\u first\u name`=:firstname,`contact\u names`=:name,`contact\u email`=:email,`telephone`=:电话,其中`user\u name`=:user\u name
    用户名正在会话中