У меня проблема с использованием подготовленных заявлений в моем проекте. Я создал класс с именем БД и в этом классе я функция называется «где» и в таком виде он не работает:Подготовленные заявления в правильном направлении?
public function where($table_name, $key, $value) {
try {
$stmt = $this->connection->prepare("SELECT * FROM $table_name WHERE :key = :value ORDER BY id DESC");
$stmt->execute(array(":key" => $key, ":value" => $value));
return ($stmt->rowCount() > 0) ? $stmt : false;
} catch(Exception $e) {
return false;
}
}
, но когда я изменить функцию, чтобы просто работать с одним местозаполнителем он работает ! Почему это происходит?
public function where($table_name, $key, $value) {
try {
$stmt = $this->connection->prepare("SELECT * FROM $table_name WHERE $key = :value ORDER BY id DESC");
$stmt->execute(array(":value" => $value));
return ($stmt->rowCount() > 0) ? $stmt : false;
} catch(Exception $e) {
return false;
}
}
Я не думаю, что вы можете использовать заполнители для имен полей в ПДО, только для параметров значения. См. Принятый ответ здесь: http://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-name-as-parameter – jeoj
Спасибо, мне это очень помогло. –