Помогите с запросом

ssaich
Дата: 28.01.2013 10:03:43
$SecCode="Холодильники";
$sql=sprintf("select * from sections where Sec_Name='%s'", mysql_real_escape_string($SecCode));
print $sql;
$res=mysql_query($sql) or die("could not SQL");



через ПХП Админку запрос выполняется, в скрипте не работает, и никак не могу понять ..почему ???
DBConstructor
Дата: 28.01.2013 10:48:01
О, господи! O_o
Надеюсь вы не напрямую от пользователя запихиваете %s в запрос, а фильтруете во избежании взлома вашего сайта через sql-injection... Да?
В скрипте работать не будет, так как sprintf подставляет строку в запрос вместо %s, а последовательность символов '%s' внутри одинарных кавычек означает произвольное количество символов до символа s для оператора LIKE.
http://dev.mysql.com/doc/refman/4.1/en/string-comparison-functions.html#operator_like
Akina
Дата: 28.01.2013 11:19:16
А нам показать результат print $sql; жаба задавила?
tanglir
Дата: 28.01.2013 11:23:54
DBConstructor
для оператора LIKE
А где вы у ТСа увидели "оператор LIKE"?
DBConstructor
Дата: 28.01.2013 11:27:53
tanglir, в том-то и дело, что нигде. ='%s' при выполнении sql скрипта, расценивается как точная последовательность символов. Никакой подстановкой значения здесь не пахнет.
tanglir
Дата: 28.01.2013 11:36:25
DBConstructor, если вы хотели сказать, что sprintf не подставит вместо %s значение, возвращаемое mysql_real_escape_string($SecCode), то надо было так и написать. А то начали рассказывать про какие-то несуществующие лайки :)
ЗЫ. А ещё можно было дать совет, как сделать, чтобы значение таки подставлялось. Подозреваю, надо просто заэкранировать кавычки.
DBConstructor
Дата: 28.01.2013 12:00:29
tanglir,

DBConstructor
В скрипте работать не будет, так как sprintf подставляет строку в запрос вместо %s...


не?
DBConstructor
Дата: 28.01.2013 12:14:32
tanglir,

Я дам другой совет - использовать в подобных случаях параметризованные запросы.
tanglir
Дата: 28.01.2013 12:25:34
DBConstructor
Я дам другой совет - использовать в подобных случаях параметризованные запросы.
Ну да, это лучший вариант.
DBConstructor
не?
Не. Получается, вы всё-таки предполагаете, что ТС хотел увидеть такой запрос
select * from sections where Sec_Name='%s'
, а не такой
select * from sections where Sec_Name='Холодильники'
? Но ведь такой запрос как раз должен работать.

ЗЫ. И вообще, пока мы не увидим
Akina
А нам показать результат print $sql; жаба задавила?
, всё это гадания на кофейной гуще.
ssaich
Дата: 28.01.2013 15:38:16
Akina
А нам показать результат print $sql; жаба задавила?


Вот копи паста из лога сервера

    1 Query	select * from sections where Sec_Name='Холодильники'