<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: быстрые запросы или возможность инъекции</title>
    <link>https://opennet.ru/openforum/vsluhforumID8/6149.html</link>
    <description> содержит $cookies&#123;session&#125; такой шаблон случайных символов:&lt;br&gt;    my &#064;r = (  0 .. 9, &apos;A&apos; .. &apos;Z&apos;, &apos;a&apos; .. &apos;z&apos; );&lt;br&gt;&lt;br&gt;будет ли инъекци в таком запросе?&lt;br&gt;&lt;br&gt;    $cookies&#123;session&#125; =~ s/&#092;W+//g;&lt;br&gt;    $cookies&#123;session&#125; =~ s/&#091;&amp;lt;&amp;gt;&#092;&amp;#124;&#092;-&amp;&#092;.&#092;&#092;&#092;/&#092;0&#093;//g;&lt;br&gt;         $session = $dbh-&amp;gt;selectrow_hashref(qq&#123;SELECT t1.u,&lt;br&gt;                           ................&lt;br&gt;                             WHERE t1.session = ?&lt;br&gt;                             &lt;br&gt;                             LIMIT 1&lt;br&gt;         &#125;, undef, $cookies&#123;session&#125;); &lt;br&gt;&lt;br&gt;этот запрос нужно выполнять всегда, очень часто, я попробовал ускорить его поставив selectrow_hashref() вместо fetchrow_hashref()&lt;br&gt;&lt;br&gt;(Storable не понравился, так как дополниельный геморой настойки прав доступа и etc для того кто будет устанавливать программу)&lt;br&gt;</description>

<item>
    <title>быстрые запросы или возможность инъекции (angra)</title>
    <link>https://opennet.ru/openforum/vsluhforumID8/6149.html#10</link>
    <pubDate>Tue, 14 Apr 2009 08:48:52 GMT</pubDate>
    <description>Не стоит полагаться, что do реализован обязательно таким образом. Хотя на данный момент в DBI.pm это так, но не обязательно будет так в будущем, а самое главное DBD:: модули вполне могут этот метод перекрывать. К сожалению для DBD::mysql на данный момент именно такая(prepare+execute) реализация, хотя мускулевое API позволяет более скоростной вариант. &lt;br&gt;</description>
</item>

<item>
    <title>быстрые запросы или возможность инъекции (bibi)</title>
    <link>https://opennet.ru/openforum/vsluhforumID8/6149.html#9</link>
    <pubDate>Mon, 13 Apr 2009 17:10:25 GMT</pubDate>
    <description>извените, я не много прогнал&lt;br&gt;&lt;br&gt;в методе do, есть метод prepare и экранирование есть, тоже... &lt;br&gt;по этому нету смысла сравнивать эти два метода  do и prepare...&lt;br&gt;&lt;br&gt;  sub do &#123;&lt;br&gt;      my($dbh, $statement, $attr, &#064;bind_values) = &#064;_;&lt;br&gt;      my $sth = $dbh-&amp;gt;prepare($statement, $attr) or return undef;&lt;br&gt;      $sth-&amp;gt;execute(&#064;bind_values) or return undef;&lt;br&gt;      my $rows = $sth-&amp;gt;rows;&lt;br&gt;      ($rows == 0) ? &quot;0E0&quot; : $rows; # always return true if no error&lt;br&gt;  &#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>быстрые запросы или возможность инъекции (angra)</title>
    <link>https://opennet.ru/openforum/vsluhforumID8/6149.html#8</link>
    <pubDate>Mon, 13 Apr 2009 03:15:44 GMT</pubDate>
    <description>&amp;gt;angra, спасибо за комментарий, но я не про это спрашивал &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;я хотел доделать свой класс, спрашивал быстрее ли do чем выборка через &lt;br&gt;&amp;gt;prepare? &lt;br&gt;&lt;br&gt;Зависит от запросов. Вы бы лучше разобрались для чего нужен каждый из них. &lt;br&gt;&amp;gt;или зачем сделали select*_hashref()? &lt;br&gt;&lt;br&gt;А зачем сделали все остальное? В ряде ситуаций весьма полезная штука. Perl вообще отличается принципом &quot;есть более чем один способ сделать это&quot;&lt;br&gt;&lt;br&gt;&amp;gt;я так понял, что нету разницы, но перл когда экранирует от инъкций &lt;br&gt;&amp;gt;он выделяет память чтобы провести защиту от инъекций, было написано что &lt;br&gt;&amp;gt;это может быть очень медленно, в СУБД mysql  версии больше &lt;br&gt;&amp;gt;5.0, есть возможность экранировать на стороне сервера СУБД (у нее самой, &lt;br&gt;&amp;gt;в самом сервере) ... &lt;br&gt;&lt;br&gt;DBI это уровень абстракции и зачастую позволяет сделать то, что нет в движке БД. Однако prepare был в мускульном API с четвертой версии как минимум. Другое дело, что языки типа пыха в то время не владели всем мускулевым API. Задачи prepare не столько защита от инъекций сколько скорость и удобство, за</description>
</item>

<item>
    <title>быстрые запросы или возможность инъекции (bibi)</title>
    <link>https://opennet.ru/openforum/vsluhforumID8/6149.html#7</link>
    <pubDate>Sun, 12 Apr 2009 17:50:09 GMT</pubDate>
    <description>angra, спасибо за комментарий, но я не про это спрашивал&lt;br&gt;&lt;br&gt;я хотел доделать свой класс, спрашивал быстрее ли do чем выборка через prepare? &lt;br&gt;или зачем сделали select*_hashref()?&lt;br&gt;&lt;br&gt;я так понял, что нету разницы, но перл когда экранирует от инъкций он выделяет память чтобы провести защиту от инъекций, было написано что это может быть очень медленно, в СУБД mysql  версии больше 5.0, есть возможность экранировать на стороне сервера СУБД (у нее самой, в самом сервере) ...&lt;br&gt;&lt;br&gt;провести тестирование я не могу, не знаю как правильно....&lt;br&gt;</description>
</item>

<item>
    <title>быстрые запросы или возможность инъекции (angra)</title>
    <link>https://opennet.ru/openforum/vsluhforumID8/6149.html#6</link>
    <pubDate>Sun, 12 Apr 2009 03:41:47 GMT</pubDate>
    <description>Да где же тут матерные обороты?. Цикл while в постфиксной форме и стандартная команда push для забрасывания в массив значения. &#064;&#123;$loop_data&#125; - разыменование ссылки на массив, если выражаться сишными терминами, причем фигурные скобки можно в данном случае опустить. &lt;br&gt;Автору топика. Если тебе нужны _все_ данные из запроса, то используй fetchall, если нужна построчная обработка, то просто fetch. Аналогично отдельный prepare, если нужно многократно выполнить один и тот же запрос с разными параметрами, в противном случае функции типа все_в_одном. Даже странно, что такие очевидные вещи нужно объяснять. Также непонятно как DBI можно осваивать дольше чем пару дней, он же простой как дверь. Другое дело DBIx, при всей красоте и &quot;интуитивности&quot; он таит массу подводных камней. &lt;br&gt;</description>
</item>

<item>
    <title>быстрые запросы или возможность инъекции (Pahanivo)</title>
    <link>https://opennet.ru/openforum/vsluhforumID8/6149.html#5</link>
    <pubDate>Sat, 11 Apr 2009 19:14:16 GMT</pubDate>
    <description>&amp;gt;    my $loop_data; &lt;br&gt;&amp;gt;         push &#064;&#123;$loop_data&#125;, $_ while $_ = $sth-&amp;gt;fetchrow_hashref();&lt;br&gt;&lt;br&gt;клево конечно что перл позволяет такие матерные обороты ))&lt;br&gt;но чето я их затрудняюсь на русский )) толи уже поздна и пора спать ))&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>быстрые запросы или возможность инъекции (bibi)</title>
    <link>https://opennet.ru/openforum/vsluhforumID8/6149.html#4</link>
    <pubDate>Fri, 10 Apr 2009 16:27:54 GMT</pubDate>
    <description>я написал программу, сейчас оптимизирую, пересматриваю класс работы с DBI&lt;br&gt;&lt;br&gt;опять хочу спросить быстрее ли методв do чем prepare?&lt;br&gt;&lt;br&gt;предыдущая прогармма у меня ест не много, точнее  более менее прилично, ресурсы СУБД...  особенно когда боты прийдут под вечер, Яша и др.&lt;br&gt;&lt;br&gt;передаються много int значнеией числовых в программе... кто-то тестировал быстрее ли selectall_hashref и selectall_arreyref чем от prepare???&lt;br&gt;&lt;br&gt;или зачем сделали эти методы selectall_hashref и selectall_arreyref в DBI?&lt;br&gt;&lt;br&gt;&lt;br&gt;если do быстрее, то как написать для HTML::Template массив х&amp;#1108;шей?&lt;br&gt;    my $loop_data;&lt;br&gt;         push &#064;&#123;$loop_data&#125;, $_ while $_ = $sth-&amp;gt;fetchrow_hashref();&lt;br&gt;&lt;br&gt;&lt;br&gt;так не работает:&lt;br&gt;         push &#064;&#123;$loop_data&#125;, $_ while $_ = $dbh-&amp;gt;selectrow_hashref ( $sql2  );&lt;br&gt;&lt;br&gt;&lt;br&gt;тут только arrayref подходит и названия столбцов через цыклы пропустить? но это не удобно... но можно...&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>быстрые запросы или возможность инъекции (angra)</title>
    <link>https://opennet.ru/openforum/vsluhforumID8/6149.html#3</link>
    <pubDate>Fri, 09 Jan 2009 12:00:56 GMT</pubDate>
    <description>Еще раз, при использовании fetchrow_hashref не только делается преобразование в хеш, но еще и посылается дополнительный запрос серверу на получение имен полей. По логике вашей программы имена и так известны, так зачем лишние обращения. Более того самостоятельное превращение в хеш вам дает независимость названий ключей хеша и полей в запросе. &lt;br&gt;Использовать fetchrow_hashref удобно если по логике программы мы на момент обработки не знаем имена полей, например при &quot;select * from ...&quot; или передачи хендлера запроса в функцию. &lt;br&gt;В конце концов, что вам вам мешает проверить скорость обоих вариантов, может обращение к базе вообще не является узким местом в вашем коде и нет смысла его оптимизировать. &lt;br&gt;</description>
</item>

<item>
    <title>быстрые запросы или возможность инъекции (bibi)</title>
    <link>https://opennet.ru/openforum/vsluhforumID8/6149.html#2</link>
    <pubDate>Thu, 08 Jan 2009 11:59:25 GMT</pubDate>
    <description>&amp;gt;При использовании(даже неявном) бинда параметров инъекции в любом случае не будет. Логика &lt;br&gt;&amp;gt;работы регекса неясна, если есть используемый класс символов, то поставь его &lt;br&gt;&amp;gt;отрицание и всех делов. В данном случае s/&#091;^&#092;dA-Za-z&#093;//g. Еще с tr(он &lt;br&gt;&amp;gt;же ~y//) можно попробовать, по идее он быстрее, но, учитывая последующий &lt;br&gt;&amp;gt;запрос в базу, роли это играть не будет. Ну и до &lt;br&gt;&lt;br&gt;понятно, спасибо&lt;br&gt;&lt;br&gt;&amp;gt;кучи arrayref все-таки побыстрее hashref, так как не нужно отдельно запрашивать &lt;br&gt;&amp;gt;у сервера fieldlist. &lt;br&gt;&lt;br&gt;да, быстрее arrayref, но мне надо будет заносить в шаблон HTML::Template массив хэшей, в данном случае все равно надо будет делать хэши&lt;br&gt;&lt;br&gt;то есть я незнаю будет ли быстрее если я с базы возьму срузу hashref или если я в цыкле с arrayref сделаю массив хэшей&lt;br&gt;&lt;br&gt;push &#064;&#123;$rows&#125;, $_ while $_ = $sth-&amp;gt;fetchrow_hashref();&lt;br&gt;$template-&amp;gt;param(ROWS =&amp;gt; $rows);&lt;br&gt;</description>
</item>

</channel>
</rss>
