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