PDO为更新准备了声明;工作不正常


PDO prepared statement for update doesn't work properly

这是我的php代码:

public function update($table,$fields_and_values,$condition_field,$condition_field_value)
{
    $query="UPDATE $table SET ";
    foreach($fields_and_values as $field=>$value) $query.=($field."=:".$field." ,");
    $query.=" ";
    $query=str_replace(", "," WHERE ",$query);
    $query.=($condition_field."='".$condition_field_value."'");
    echo $query;
    $stmt=$this->conn->prepare($query);
    foreach($fields_and_values as $field=>$value) $stmt->bindParam(":".$field,$value);
    $stmt->execute();
}

这就是我如何调用类中的函数:

    $db=new db_connection('localhost','root','','maps');
$db->connect();
    $arr=array('username'=>'testfromnewclass3','password'=>'123456');
    $db->update('users',$arr,'username','term');
    $db->disconnect();

断开连接等其他功能的作用无关紧要!它们工作正常
我的问题是,当执行此命令时,用户名密码都变为123456!这就是我从echo $query:中得到的

UPDATE users SET username=:username ,password=:password WHERE username='term'

我的功能有问题吗?如果是的话,我该怎么修?

使用$stmt->bindValue($field, $value);而不是$stmt->bindParam(":".$field,$value);

检查此项以了解PDOStatement::bindParam()PDOStatement::bindValue() 之间的差异