Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> экранирвоать dbi prepare 
:(
    Опции темы
gcc
Дата 12.1.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



trace я не включал, не знаю как его включит, надо посмотреть, попробовать

я написал так:
Код

    my $trace_setting = DBI->trace;
    print $trace_setting;

ничего не вывел


скорость мне не нужна, ну вот такой запрос прошел и вывел:
Код

1


Код

my $sth = $self->{dbh}->prepare("SELECT count(*) FROM logs where ?");
my $id = $sth->execute('id = 10');

 print $self->{query}->header( -charset => 'utf8' );
print $id;
exit; 


Это сообщение отредактировал(а) gcc - 12.1.2009, 19:58
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 10.4.2009, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



написал программу, сейчас смотрю что оптимизирвать можно и парадигму ООП по красивей пересматриваю...

появился вопрос про DBI, было написано в статье что что метод do быстрее, есть ли разнциы по скорости между метода do или prepare? никто не тестировал?

или можно использовать исключительно prepare? (передаються int числовые значения, инъекций не будет)

если do быстрее, то как написать для HTML::Template массив хєшей?

Код

    my $loop_data;
         push @{$loop_data}, $_ while $_ = $sth->fetchrow_hashref();


так не работает:
Код

         push @{$loop_data}, $_ while $_ = $dbh->selectrow_hashref ( $sql2  );


тут только arrayref подходит и названия столбцов через цыклы пропустить? но это не удобно...

Это сообщение отредактировал(а) gcc - 10.4.2009, 04:36
PM WWW ICQ Skype GTalk Jabber   Вверх
tolkien
Дата 11.4.2009, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Врядли do быстрее. Потому что в нутри do есть prepare
PM MAIL   Вверх
gcc
Дата 12.4.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



tolkien,  врядли там есть prepare. do метод сделали как раз чтобы выполнять действия без вывода ошибочной информации, там только 0 или 1 и в нем нету защиты от инъекций...
PM WWW ICQ Skype GTalk Jabber   Вверх
KSURi
Дата 13.4.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



gcc, плохо читали документацию.
Цитата

The default do method is logically similar to:

Код

  sub do {
      my($dbh, $statement, $attr, @bind_values) = @_;
      my $sth = $dbh->prepare($statement, $attr) or return undef;
      $sth->execute(@bind_values) or return undef;
      my $rows = $sth->rows;
      ($rows == 0) ? "0E0" : $rows; # always return true if no error
  }





--------------------
Died at Life.pl line 21
PM Jabber   Вверх
gcc
Дата 29.7.2009, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



хотел спросить на всякий случай:

Код

    my ( $self, $c, @args) = @_;

        if ( !$args[0] || $args[0] !~ /^\d+$/ ) {
                $c->response->redirect($c->uri_for('/'));
                $c->detach(); 
            }

            my $sql_max = 'SELECT MAX(t1.id_co) AS prev                
                              FROM content AS t1
                            WHERE  t1.id_co > '.$args[0].'
                             LIMIT 1';
            
            my $sth = $dbh->prepare($sql_max);
        $sth->execute();
         my $loop_data3 = $sth->fetchrow_hashref();
        $sth->finish();  


это регулярное выражение /^\d+$/ защетит от инъекция? дырки в каталисте точно не будет, или абсолютно всё нужно ставить в execute();? (у меня много int значений)
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 30.7.2009, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



товарищи, я хотел спросить, это регулярное выражение /^\d+$/ защетит от инъекция? 
PM WWW ICQ Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2165 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.