Применение переменных в запросах SQL в качестве названия столбца

Главные вкладки

Аватар пользователя Mihail_coder Mihail_coder 12 марта 2010 в 22:04

Не поможете мне решить проблему? Или утвердиться во мнении, что так сделать нельзя?
Имеется стандартный SQL запрос, например

$sql_programs_by_task = "SELECT ID_Program FROM {KomplexProgr} WHERE Task_469 = %d";

но название столбца (здесь Task_469) должно изменяться в зависимости от некоторых условий, то есть должно подставляться динамически, например с использованием переменной.
Скажем есть переменная $Task, в которой содержиться имя столбца и именно ее надо подставить в запрос:

$sql_programs_by_task = "SELECT ID_Program FROM {KomplexProgr} WHERE $Task = %d";

возможно ли такой вариант и как сделать такой код работающим?

Комментарии

Аватар пользователя Mihail_coder Mihail_coder 12 марта 2010 в 22:20

Да, я пытался сделать в виде
$sql_programs_by_task = "SELECT ID_Program FROM {KomplexProgr} WHERE '%s' = %d",
а потом в качестве параметров вместо %s подставлять переменную, однако результата не было. Такую конструкцию я раньше не встречал и не уверен будет ли она работать. Павел, вы уверены, что так оно должно работать?

Аватар пользователя theСанитар theСанитар 12 марта 2010 в 22:33

С точки зрения идеологии, ради которой вообще затевались все эти плейсхолдеры и подстановки -- не должно бы. Ибо небезопасно. Приедет в имени переменной что-нить вроде ' UNION SELECT * FROM users и грядет гемморой.

Аватар пользователя Mihail_coder Mihail_coder 12 марта 2010 в 22:52

Переменная возвращается в результате другого запроса к базе данных. Вопрос в том, должна ли такая конструкция работать. С точки зрения безопасности возможно это не лучший вариант, но альтернативой служит перекраивание таблиц не в лучшую сторону, так что хочется рассмотреть этот вариант подробнее.