![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
не работает, пробовал по разному:
в других классах примерно так формируется:
кстате никто не видел идеальный поисковик? на cpan много модулей, может быть там есть, найти сложновато Это сообщение отредактировал(а) gcc - 4.1.2009, 16:33 |
||||
|
|||||
tolkien |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: 4 Всего: 4 |
Офф топ! Что значит 'экранировать' ? Это что то вроде сделать интерфейс для удобного вызова? |
|||
|
||||
gcc |
|
||||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
не экранировать, но если поставить так
не работает... сделал так:
Добавлено @ 20:20
да, именно для удобства и экономии кода (если что-то захочется изменить, то чтобы не переписывать несколько раз одно и тоже) Это сообщение отредактировал(а) gcc - 5.1.2009, 12:31 |
||||||||
|
|||||||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Добавлено через 1 минуту и 16 секунд но лучше продумать код... $self->{SQL}->{LIKE} вдруг с ошибкой будет... ;) |
|||
|
||||
Шуранов |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 10.3.2007 Где: Харьков Репутация: 1 Всего: 1 |
А, сделать так:
вроде оно? ![]() |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
и так
![]() gcc, что скажите? |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
я пометил что решил давно пользуюсь случаем: если не использовать prepare, а экранирвоать qq() и использовать через do selectall_* selectrow_* инъекции не будет? qq() эскепит кавычки от инъекции? Это сообщение отредактировал(а) gcc - 9.1.2009, 16:57 |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
gcc, а зачем спрашивать
![]() Так даже бывает интереснее, попытаться самому проверить. |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Шуранов, боюсь, предложенный Вами вариант будет работать только в случае, если сервер не поддерживает placeholders (когда подстановка значений происходит в модуле DBI), иначе запрос не пройдет синтаксический контроль.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
ginnie, я все время использую так через prepare и $sth->execute('bind')
DBI, DBD::MySQl должны стоять всегда, (или в чем проблема эти модули поставить... ?) Добавлено через 8 минут и 17 секунд nitr, я нашел:
http://www.easysoft.com/developer/language...ial_part_2.html тогда значит qq() не достаточно проверить на 100 я не смогу потомучто регулярные выражения perl не полностью знаю... Это сообщение отредактировал(а) gcc - 11.1.2009, 20:31 |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
ginnie, А как тогда использовать по другому через quote()?
|
|||
|
||||
nitr |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
gcc, верно начинаете думать...
можно открыть кукбук, там про экранирование строк есть (где про БД), и как раз ваш вопрос с qq{} есть ;). Добавлено через 1 минуту и 10 секунд ginnie, ваш ответ я не понял, т.е. вы меня запутали ![]() Добавлено через 9 минут и 16 секунд gcc, в вашем модуле можно продумать метод, сразу извиняюсь за название, надеюсь придумает, а я передам идею ;). будем считать у вас свой dbh возвращается $self->{dbh}, или подобие такой функции (она только подобие ![]()
Вот наш метод (тоже не совершенство):
|
||||
|
|||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
nitr, приношу извинения за сумбурное изложение мыслей
![]() СУБД может поддерживать prepared statements, а может не поддерживать (для MySQL см. Prepared statement support (server side prepare)). Если СУБД их поддерживает, то запросы с placeholders проходят синтаксический контроль на стороне сервера и вариант
его не пройдет. Если сервер не поддерживает prepared statements, то подстановка значений осуществляется модулем DBI (без синтаксического контроля), при этом указанный вариант может сработать (не проверял). -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
ginnie, не много не понял, если не будет включено mysql_server_prepare=1, то экранироватся через execute() не будет?
у меня везде MySQL 5.0, а как точно проверить работает ли синтаксический контроль? Это сообщение отредактировал(а) gcc - 12.1.2009, 18:36 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
gcc, экранироваться будет в любом случае. Не всегда будет работать prepared statement (используется для ускорения выполнения запросов).
Добавлено @ 18:56 По поводу проверки, попробуйте включить trace в DBI и выполнить запрос с placeholder'ами, посмотрите что передается в СУБД. Кроме того, попробуйте указанный выше вариант (замените названия таблицы и поля на свои)
и приведите здесь сообщение об ошибке. P.S. Посмотрел сейчас код и понял, что он даже при непосредственной подстановке в DBI не сработает из-за экранирования. Это сообщение отредактировал(а) ginnie - 12.1.2009, 19:02 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |