我正在从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());
}
答案 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查询