Intereting Posts
Как захватить данные из сообщения в класс Использование одного и того же идентификатора сеанса в двух сценариях PHP одновременно CodeIgniter: пытается вызвать метод конструктора, чтобы проверить, зарегистрирован ли пользователь (вызывает бесконечный цикл перенаправления) Динамическое изменение имени столбца в инструкции PDO Вычислить время, прошедшее через php, – более 24 часов вставить корейские символы в mysql Получение ценности брата / сестринского узла Автоматическое увеличение в phpmyadmin Путь отдыха Laravel Уникальный, непредсказуемый, 12-значный, целочисленный идентификатор Функция ereg () устарела zend формировать пользовательский атрибут в опции выбора? изменить пароль администратора (необходимо сделать форму) Неожиданные результаты при работе с очень большими целыми числами на интерпретируемых языках данные о трубопроводах в командной строке php?

Отчет, подготовленный PDO для обновления, не работает должным образом

Это мой 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()