这是我的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()
之间的差异