Очередной костыль экранирования mysqli запросов - Visavi.net https://visavi.net/ RSS - Visavi.net https://visavi.net/assets/img/images/logo_small.png RSS - Visavi.net https://visavi.net/ [email protected] (admin) [email protected] (admin) Thu, 26 Dec 2024 19:11:26 +0300 <blockquote class="blockquote"><strong>Башка</strong> (10.01.16 / 00:22)<br> <strong>KpuTuK</strong>, позволяет не заботится о производительности запросов вида:<br> <pre class="prettyprint"> &lt;?php foreach($messages as $message){ $mysqli-&gt;myQuery(&#039;INSERT INTO messages (title, author, message) VALUES (?, ?, ?)&#039;, &#91;...]); } </pre></blockquote> запросы в цикле? серьезно? https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов ramzes Fri, 24 Feb 2017 07:23:20 +0300 Комментарии https://visavi.net/articles/comment/577/29538 <blockquote class="blockquote"><strong>echelon</strong> (27.03.16 / 10:47)<br> На дворе 2016 год, а вы такое обсуждаете. Ужасно.</blockquote> Благо есть что обсудить )) https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов Андрей Tue, 26 Apr 2016 22:23:49 +0300 Комментарии https://visavi.net/articles/comment/577/2197 На дворе 2016 год, а вы такое обсуждаете. Ужасно. https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов echelon Sun, 27 Mar 2016 10:47:13 +0300 Комментарии https://visavi.net/articles/comment/577/2196 <strong>KpuTuK</strong>, позволяет не заботится о производительности запросов вида:<br> <pre class="prettyprint"> &lt;?php foreach($messages as $message){ $mysqli-&gt;myQuery(&#039;INSERT INTO messages (title, author, message) VALUES (?, ?, ?)&#039;, &#91;...]); } </pre> https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов Артур Sun, 10 Jan 2016 00:22:39 +0300 Комментарии https://visavi.net/articles/comment/577/2187 <strong>Башка</strong>, довольно сомнительный кэш https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов KpuTuK Sat, 09 Jan 2016 23:51:30 +0300 Комментарии https://visavi.net/articles/comment/577/2186 Ну тут спорно. Лучше сделать некий кеш, в который будут добавляться stmt как то так:<br> <pre class="prettyprint"> &lt;?php public function myQuery($query, $params, $isClean = true){ if(!isset($this-&gt;statements&#91;$query])){ $this-&gt;statements&#91;$query] = $this-&gt;prepare($query); } $stmt = $this-&gt;statements&#91;$query]; $p = array_values($params); array_unshift($p, array_keys($params)); call_user_func_array(&#91;$stmt, &#039;bind_param&#039;], $p); $result = $stmt-&gt;execute(); if($isClean){ $stmt-&gt;close(); unset($this-&gt;statments&#91;$query]); } return $result; } </pre> https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов Артур Sat, 09 Jan 2016 23:19:55 +0300 Комментарии https://visavi.net/articles/comment/577/2185 <strong>Башка</strong> (Сегодня / 22:43)<br> <pre class="prettyprint"> &lt;?php class MyMysqli extends mysqli{ public function myQuery($query, $params){ $stmt = $this-&gt;prepare($query); $p = array_values($params); array_unshift($p, array_keys($params)); call_user_func_array(&#91;$stmt, &#039;bind_param&#039;], $p); $result = $stmt-&gt;execute(); $stmt-&gt;close(); return $result; } } $mysql = new MyMysqli(&quot;localhost&quot;, &quot;my_user&quot;, &quot;my_password&quot;, &quot;world&quot;); $mysql-&gt;myQuery(&#039;SELECT * FROM users WHERE login = ?&#039;, &#91;&#039;s&#039; =&gt; &#039;admin&#039;]); </pre> А то забудут закрыть https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов KpuTuK Sat, 09 Jan 2016 23:15:18 +0300 Комментарии https://visavi.net/articles/comment/577/2184 <blockquote class="blockquote"><strong>Башка</strong> (Сегодня / 22:42)<br> Через Redis<br> ротор было дело и БД не любил</blockquote> я не про кэширование а про <blockquote class="blockquote">Писать не многим больше, достаточно обернуть стандартный класс mysqli и поправить семантику на подходящую.</blockquote> https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов KpuTuK Sat, 09 Jan 2016 23:11:11 +0300 Комментарии https://visavi.net/articles/comment/577/2183 <blockquote class="blockquote">как то лаконичние</blockquote> <pre class="prettyprint"> &lt;?php class MyMysqli extends mysqli{ public function myQuery($query, $params){ $stmt = $this-&gt;prepare($query); $p = array_values($params); array_unshift($p, array_keys($params)); call_user_func_array(&#91;$stmt, &#039;bind_param&#039;], $p); return $stmt-&gt;execute(); } } $mysql = new MyMysqli(&quot;localhost&quot;, &quot;my_user&quot;, &quot;my_password&quot;, &quot;world&quot;); $mysql-&gt;myQuery(&#039;SELECT * FROM users WHERE login = ?&#039;, &#91;&#039;s&#039; =&gt; &#039;admin&#039;]); </pre> https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов Артур Sat, 09 Jan 2016 22:43:14 +0300 Комментарии https://visavi.net/articles/comment/577/2182 <blockquote class="blockquote">например? через foreach?</blockquote> Через Redis<br> <blockquote class="blockquote">много кто не любит подготовленные запросы (взять тот же пдо клас в роторе)</blockquote> ротор было дело и БД не любил https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов Артур Sat, 09 Jan 2016 22:42:01 +0300 Комментарии https://visavi.net/articles/comment/577/2181 <blockquote class="blockquote"><strong>Башка</strong> (Сегодня / 22:22)<br> Экономия через кэширование гораздо более эффективный способ повышения производительности, чем подобные рекомендации ;)<br> <br> Писать не многим больше, достаточно обернуть стандартный класс mysqli и поправить семантику на подходящую.</blockquote> например? через foreach? тут не в экономии дело. много кто не любит подготовленные запросы (взять тот же пдо клас в роторе) а $db-&gt;query(&#039;sql&#039;, [&#039;params&#039;]) как то лаконичние вашего выше https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов KpuTuK Sat, 09 Jan 2016 22:26:51 +0300 Комментарии https://visavi.net/articles/comment/577/2180 Экономия через кэширование гораздо более эффективный способ повышения производительности, чем подобные рекомендации ;)<br> <br> Писать не многим больше, достаточно обернуть стандартный класс mysqli и поправить семантику на подходящую. https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов Артур Sat, 09 Jan 2016 22:22:13 +0300 Комментарии https://visavi.net/articles/comment/577/2179 <strong>Башка</strong>, <br> <blockquote class="blockquote">Каждый подготавливаемый запрос использует ресурсы сервера. Если запрос больше не нужен, его необходимо сразу закрыть. Если не сделать этого явно, запрос закроется сам, но только когда PHP освободит его дескриптор, как правило это происходит при выходе запроса из области видимости или при завершении работы скрипта.<br> <br> Использование подготавливаемых запросов не всегда приводит к повышению эффективности. Если параметризованный запрос запускается лишь раз, это приводит к большему количеству клиент-серверных обменов данными, нежели при выполнении простого запроса. Именно по этой причине в примере выше выражение SELECT выполнялось, как обычный запрос.<br> <br> Также, имеет смысл рассмотреть SQL синтаксис вставки множества значений в выражении INSERT. В примере выше мультивставка (значения для вставки перечисляются через запятую) в предложении INSERT обошлась бы дешевле, чем подготовленный запрос.</blockquote> <br> да и влом столько писать https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов KpuTuK Sat, 09 Jan 2016 21:40:01 +0300 Комментарии https://visavi.net/articles/comment/577/2178 <a href="http://php.net/manual/ru/mysqli.prepare.php" target="_blank" rel="nofollow">Сначала подготавливаем запрос</a><br> <a href="http://php.net/manual/ru/mysqli-stmt.bind-param.php" target="_blank" rel="nofollow">Затем привязываем параметры</a><br> <br> К примеру:<br> <pre class="prettyprint"> &lt;?php $mysqli = new mysqli(&quot;localhost&quot;, &quot;my_user&quot;, &quot;my_password&quot;, &quot;world&quot;); $select = $mysqli-&gt;prepare(&quot;SELECT * FROM users WHERE login=?&quot;); $select-&gt;bind_param(&quot;s&quot;, &#039;admin&#039;); $result = $select-&gt;fetch(); </pre> https://visavi.net/articles/comments/577 Очередной костыль экранирования mysqli запросов Артур Sat, 09 Jan 2016 17:18:04 +0300 Комментарии https://visavi.net/articles/comment/577/2177