Я не уверен, связана ли проблема с самим оператором prepare()
или с bindValue
s, но я не могу понять, почему это работает как query()
, а не как подготовленный оператор.
$dbh = new PDO("mysql:host=$dbhost", $dbuser, $dbpass, $options);
$dbh->beginTransaction();
$record_data = $dbh->prepare("UPDATE $db.$dbt SET :column = :value WHERE `key` = :key;");
foreach ( $qaPairs as $pair ) {
list($question , $answer) = explode('=', $pair);
echo "$key : $question $answer";
$record_data->bindValue(':column', $question);
$record_data->bindValue(':value', $answer);
$record_data->bindValue(':key', $key);
$record_data->execute();
}
$dbh->commit();
Если я заменю $record_data->bindValue…
s и $record_data->execute()
на
$dbh->query("UPDATE `$db`.`$dbt` SET `$question`='$answer' WHERE `key`='$key';");
это работает.
Для устранения неполадок я добавил оператор echo, и напечатанные значения - это просто буквы и цифры, без кавычек; также имена баз данных и таблиц не заключаются в кавычки / tick'd.
Я прочитал в другом вопросе, что зацикливание вызывает проблемы с prepare
и bind_
. Я переключился с bindParam
на bindValue
, но это, похоже, не помогло ...
РЕДАКТИРОВАТЬ : результаты var_dump($key,$question,$answer)
:
string(17) "m3dc78db1e8368428" string(3) "age" string(2) "23" age 23