Доктрина DBAL подготовила запрос

Я использую PHP-доктрину DBAL, и я хочу использовать метод get, подобный следующему:

function get($attr, $value){
$conn = DriverManager::getConnection($params, $config);

$sql = "SELECT * FROM mytable WHERE ? = ?";
$statement = $conn->executeQuery($sql, array($attrs, $value));
return $statement->fetchAll();
}
get("id", 1);

но это не работает Интересно, возможно ли препятствовать параметризации столбцов, а также значений.
Вот документы, которые я использую:
http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#executequery

1

Решение

Нет, это невозможно. Вы не можете динамически связать имя столбца (и это не doctrine/symfony ограничение — это просто, как работает БД).
Способ подготовки заявления работает:

Подготовленные заявления в основном работают так:

  1. Подготовка: шаблон оператора SQL создается и отправляется в базу данных. Некоторые значения остаются неуказанными и называются параметрами
    (с пометкой «?»). Пример: INSERT INTO MyGhest VALUES (?,?,?)
  2. База данных анализирует, компилирует и выполняет оптимизацию запросов для шаблона оператора SQL и сохраняет результат без его выполнения.
  3. Выполнение: позднее приложение связывает значения с параметрами, и база данных выполняет инструкцию. Приложение
    может выполнять оператор столько раз, сколько он хочет с разными
    ценности

Таким образом, вы не можете выполнить шаг 2, не зная, какие столбцы вы собираетесь «использовать».

АЛЬТЕРНАТИВНОЕ РЕШЕНИЕ:
То, чего вы хотите достичь, можно сделать, подготовив sql сначала строка, затем ее разбор (подготовленное утверждение) и затем связывание ценности

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]