Intereting Posts
Использование PDO для вставки нескольких записей в несколько таблиц из одного оператора? Почему бы не создать экземпляр нового объекта внутри конструктора объекта? Удалить index.php в codeigniter 2.1.0 Как запустить PHP-скрипт каждые 5-10 минут без cron, perl и т. Д.? Blobstore на GAE PHP Как обрезать и выгружать фотографию с помощью плагина jQuery с помощью php Хранение и получение пути изображения в базе данных mysql php Получить все фотографии из Instagram, которые имеют определенный хэштегов с PHP Как использовать DATE () в Doctrine 2 DQL? Преимущество перехода по ссылке против использования глобального? найти max () определенного значения многомерного массива в php как выполнять некоторую функцию в определенное время неявно Получить PHP для обновления с каждой строкой, возвращаемой командой оболочки Laravel 5: Использование кеша :: или DB :: внутри функции расписания ядра () Как сделать даты синтаксиса strtotime в формате австралийского (т.е. Великобритании): dd / mm / yyyy?

Динамическое изменение имени столбца в инструкции PDO

Возможно ли передать имя столбца в качестве параметра в подготовленное заявление MySQL? Возьмем следующий пример:

UPDATE Images SET :placement = :imageURL WHERE ID = :titleID; 

PDO добавляет ' вокруг каждого параметра, поэтому средняя линия выше:

 SET 'Homepage' = '1.jpg' 

Какой MySQL не нравится. Есть ли способ включить параметры для имен полей в заявлениях PDO и принять их?

В противном случае, я думаю, мне придется написать несколько разных заявлений PDO, в зависимости от того, что было выбрано (?).

Вам нужно будет сделать что-то вроде этого:

 $column = 'someColumn'; $stmt = $db->prepare("UPDATE tableName SET {$column} = :columnValue WHERE ID = :recordId"); 

Параметрированные заполнители предназначены только для значений.

Я бы предложил вам прочитать комментарий @YourCommonSense, опубликованный по вашему вопросу.

В таких ситуациях я использую разные параметры замены, например:

 $unitLabel = 'store_number'; $sql = 'select * from users where [unitLabel] = :unit and level = :level;'; $sql = str_replace('[unitLabel]', $unitLabel, $sql); $params = array( ':unit' => 300, ':level' => 'admin', ); $stmt = $dbh->prepare($sql); $stmt->execute($params); 

Готовый SQL-запрос заканчивается обработкой (более или менее) следующим образом:

 SELECT * FROM USERS WHERE store_number = 300 AND level = 'admin'; 

Что работает для моей ситуации. Надеюсь, это поможет. 🙂