Это мой 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();
Не имеет значения, что делают другие функции, такие как 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()