PDO更新语句问题

时间:2014-04-25 13:12:21

标签: php pdo sql-update

我正在从mysqli转换为PDO,而且非常初学者。这是我的数据库'users'

的更新声明
    public function pdo_update_test() {
    $sql = "UPDATE users SET visible_password = ?, hashed_password = ?, ";
    $sql .="temp_hashed_password = ?, email = ?, first_name= ?, last_name = ?, ";
    $sql .="position = ?, location = ?, city = ?, country = ?, institution = ? ";
    $sql .="interests = ?, profile_comment = ? WHERE id =" . $this->id;
    $query = $handler->prepare($sql);
    $result = array($visible_password, $hashed_password, $temp_hashed_password, $email, 
                    $first_name, $last_name, $position, $location, $city, $country, $institution, 
                    $interests, $profile_comment);
    $query->execute($result);
        if (($query = $handler->prepare($sql)) === false) {
            print_r($handler->errorInfo());
        }
       if ($query->execute($result) === false) {
          print_r($query->errorInfo());
        }
      }
我正在使用?而不是名字持有人,因为一旦我有这个工作,我将尝试使它抽象,所以我可以在我的网站的所有类中使用它,我发现它更容易吗?比名称持有人。当我运行以下操作时,它无法正常工作。我确信这是一个明显的错误,但我似乎无法看到这个问题......

   $user = new User();
   $user->id= 256;
   $visible_password = "Bob";
   $user->pdo_update_test();

我找到了一个让整个事物充满活力的解决方案。我不会认为它会对其他人有所帮助(因为我是初学者),但我会发布它无论如何......

如果您发现问题或有批评,请告诉我

  public function pdo_update_test(){
    $attributes = $this->attributes();
    $attribute_pairs = array();
    foreach($attributes as $key => $value) {
      if(isset($value))
      $attribute_pairs[] = "{$key}='{$value}'";
    }
    $sql = "UPDATE ".self::$table_name." SET ";
    $sql .= join(", ", $attribute_pairs);
    $sql .= " WHERE id=". $this->id;
    $query = $handler->prepare($sql);
    $query->execute(array());
}

1 个答案:

答案 0 :(得分:1)

您需要为查询动态创建SET语句。要使其仅包含实际字段,您需要的值。

因此,对于给定的代码,它应该生成一个查询

UPDATE users SET visible_password = ? WHERE id = ?

- 但不是您上面写的,列出了所有字段

并且它不是与PDO相关的问题 - 它只是基本的字符串操作,每个PHP用户都应该能够编写。如果您不能,则可以参考PDO tag wiki以获取要采用的代码。

要使其正常运行,您的代码必须像这样

$user = new User();
$user->id= 256;
$data = array('visible_password' => "Bob");
$user->pdo_update_test($data);

其中pdo_update_test将从$ data array

创建上述SQL查询