Я использую 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
Нет, это невозможно. Вы не можете динамически связать имя столбца (и это не doctrine
/symfony
ограничение — это просто, как работает БД).
Способ подготовки заявления работает:
Подготовленные заявления в основном работают так:
- Подготовка: шаблон оператора SQL создается и отправляется в базу данных. Некоторые значения остаются неуказанными и называются параметрами
(с пометкой «?»). Пример: INSERT INTO MyGhest VALUES (?,?,?)- База данных анализирует, компилирует и выполняет оптимизацию запросов для шаблона оператора SQL и сохраняет результат без его выполнения.
- Выполнение: позднее приложение связывает значения с параметрами, и база данных выполняет инструкцию. Приложение
может выполнять оператор столько раз, сколько он хочет с разными
ценности
Таким образом, вы не можете выполнить шаг 2, не зная, какие столбцы вы собираетесь «использовать».
АЛЬТЕРНАТИВНОЕ РЕШЕНИЕ:
То, чего вы хотите достичь, можно сделать, подготовив sql
сначала строка, затем ее разбор (подготовленное утверждение) и затем связывание ценности
Других решений пока нет …