1
这是我的PHP代码:PDO准备更新语句不能正常工作
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'
什么毛病我的功能?如果是的话,我该如何解决它?
调试你的第二环,你有约束力的值(的var_dump是什么,你要检查什么是正在传递的实际值之间
PDOStatement::bindValue()
)。还有一些提示:使用'bindValue'而不是'bindParam'。 'bindParam'可以改变传递变量的值,它的用途是当存储过程可以返回值,然后这些值包含在你传递的变量中。另外,不要断开与MySQL的连接。你不想那样。您正在以这种方式创建开销。 – Mjh