Когда я пытаюсь добавить фигурные скобки в запросе через db_query(), в базу попадали значения без этих скобок. Причем вырезались скобки не только в названиях таблиц и переменных, но и в их значениях!
Например строка db_query("INSERT INTO {table1} SET id=1, javascript='function test1() {alert('test');}' ");
добавляет в базу данных значение javascript function test1() alert('test');
без фигурных скобок.
Экранирование фигурных скобок обратными слешами function test1() \{alert('test');\}
не помогает. Также я не нашёл никаких опций в функции db_query для отключения либо изменения режима проверки фигурных скобок. Приходится пока использовать функцию _db_query() для этого действия, но при этом теряется функцинальность сайта при использовании префиксов базы данных.
Судя по исходникам файла работы с базой данных, вырезание скобок там сделано очень просто, поэтому опцию для фильтрации параметров искать смысла нет. Расскажите кто ещё как выходил из данной ситуации?
И ещё может быть стоит разработчикам указать чтобы они в следующих версиях расширили функцию db_query() для более умной фильтрации фигурных скобок?
Комментарии
попробуй
db_query("INSERT INTO {table1} SET id=1, javascript = '%s'", $var);
О, спасибо за идею, этим способом всё нормально добавляется. Что-то этот вариант мне самому в голову не пришел почему-то....
Ха, а теперь другой косяк :
db_query("SELECT DATE_FORMAT(time,'%y.%m.%d %H')");
Съедает символ %d из запроса, пытаясь заменить его на параметр функции.А, всё, разобрался - нужно экранировать двойным процентом:
db_query("SELECT DATE_FORMAT(time,'%y.%m.%%d %H')")
тогда уж
db_query("SELECT DATE_FORMAT(time,'%s')",'%y.%m.%d %H')