![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
werzer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.4.2011 Репутация: нет Всего: нет |
Добрый день!
Начинаю использовать DBIx::Class на проекте, база Mysql. Хочу сделать insert в базу вида: INSERT INTO table (some_dtime) VALUES (FROM_UNIXTIME(?)): '1302037199'. Проблема собственно в аргументе "FROM_UNIXTIME(?)", и именно через вопросик, то есть данные будет экранировать сама база. У меня получилось: Schema->resultset('table')-> create({ some_dtime => \"FROM_UNIXTIME(1302037199)" }); Но в этом случае запрос получается вида (без экранирования базой): INSERT INTO table (some_dtime) VALUES (FROM_UNIXTIME(1302037199)) Как сделать, чтобы данные экранировала база? PS: Надо бы отредактировать название темы "DBXi Вставка данных" -> "DBIx Вставка данных" Это сообщение отредактировал(а) werzer - 11.4.2011, 18:31 |
|||
|
||||
IceSunrise |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 7.4.2008 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
werzer, А что вы хотите экранировать, там просто число?
Можете попробовать синтаксис, описанный здесь: link |
|||
|
||||
werzer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.4.2011 Репутация: нет Всего: нет |
Да, просто число. Сделал, как указано по ссылке, работает, но если указать в классе с данными: __PACKAGE__->load_components(qw/InflateColumn::DateTime/); то вылезает ошибка, что-то типа unblessed references при вызове метода ymd, завтра подробнее напишу ошибку. |
|||
|
||||
IceSunrise |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 7.4.2008 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
А зачем экранировать просто число? Пишите, как у вас есть
Число и есть число, там экранировать нечего ![]() |
||||
|
|||||
werzer |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.4.2011 Репутация: нет Всего: нет |
Просто я привык, что все данные нужно передавать через экранирование на всякий случай. Вот ошибка возвращается, если вставить в класс директиву __PACKAGE__->load_components(qw/InflateColumn::DateTime/): Can't call method "ymd" on unblessed reference at /usr/local/share/perl/5.10.1/DateTime/Format/MySQL.pm line 84. Как эту ошибку побороть? |
||||||
|
|||||||
IceSunrise |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 7.4.2008 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Дело хозяйское, но экранирование здесь излишне, если в качестве параметра попадут некорректные данные все равно будет ошибка, экранированы они или нет. А что вы делаете, в каком месте ошибка вылетает? |
|||
|
||||
Logo |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
SQL injection
Так используйте эту директиву
|
||||||
|
|||||||
werzer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.4.2011 Репутация: нет Всего: нет |
Ошибка вылезает вот тут: Schema->resultset('table')->create({ some_dtime => \["FROM_UNIXTIME(?)", [some_dtime => $time]] }) Вызывать DateTime->from_epoch тоже не хочу, так как получится путаница с часовыми поясами. Это сообщение отредактировал(а) werzer - 13.4.2011, 15:18 |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
werzer, (Виталий ?) если у тебя стоит inflate / deflate на колонке, то в create нужно передавать "объектное" значение, т.е. экземпляр DateTime.
Может так сработает ?
|
|||
|
||||
werzer |
|
||||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.4.2011 Репутация: нет Всего: нет |
Да это я ![]() В итоге заработало, как ты описал, спасибо! Но все равно DBIx хитрая штука ![]() |
||||
|
|||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
Не очень хитрая =) Для чего она не удобная - так это длинные запросы. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |