Очередной костыль экранирования mysqli запросов - Visavi.net
https://visavi.net/
RSS - Visavi.nethttps://visavi.net/assets/img/images/logo_small.pngRSS - 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">
<?php
foreach($messages as $message){
$mysqli->myQuery('INSERT INTO messages (title, author, message) VALUES (?, ?, ?)', [...]);
}
</pre></blockquote>
запросы в цикле? серьезно?
https://visavi.net/articles/comments/577
Очередной костыль экранирования mysqli запросовramzesFri, 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 запросовechelonSun, 27 Mar 2016 10:47:13 +0300Комментарииhttps://visavi.net/articles/comment/577/2196<strong>KpuTuK</strong>, позволяет не заботится о производительности запросов вида:<br>
<pre class="prettyprint">
<?php
foreach($messages as $message){
$mysqli->myQuery('INSERT INTO messages (title, author, message) VALUES (?, ?, ?)', [...]);
}
</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 запросовKpuTuKSat, 09 Jan 2016 23:51:30 +0300Комментарииhttps://visavi.net/articles/comment/577/2186Ну тут спорно. Лучше сделать некий кеш, в который будут добавляться stmt как то так:<br>
<pre class="prettyprint">
<?php
public function myQuery($query, $params, $isClean = true){
if(!isset($this->statements[$query])){
$this->statements[$query] = $this->prepare($query);
}
$stmt = $this->statements[$query];
$p = array_values($params);
array_unshift($p, array_keys($params));
call_user_func_array([$stmt, 'bind_param'], $p);
$result = $stmt->execute();
if($isClean){
$stmt->close();
unset($this->statments[$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">
<?php
class MyMysqli extends mysqli{
public function myQuery($query, $params){
$stmt = $this->prepare($query);
$p = array_values($params);
array_unshift($p, array_keys($params));
call_user_func_array([$stmt, 'bind_param'], $p);
$result = $stmt->execute();
$stmt->close();
return $result;
}
}
$mysql = new MyMysqli("localhost", "my_user", "my_password", "world");
$mysql->myQuery('SELECT * FROM users WHERE login = ?', ['s' => 'admin']);
</pre>
А то забудут закрыть
https://visavi.net/articles/comments/577
Очередной костыль экранирования mysqli запросовKpuTuKSat, 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 запросовKpuTuKSat, 09 Jan 2016 23:11:11 +0300Комментарииhttps://visavi.net/articles/comment/577/2183<blockquote class="blockquote">как то лаконичние</blockquote>
<pre class="prettyprint">
<?php
class MyMysqli extends mysqli{
public function myQuery($query, $params){
$stmt = $this->prepare($query);
$p = array_values($params);
array_unshift($p, array_keys($params));
call_user_func_array([$stmt, 'bind_param'], $p);
return $stmt->execute();
}
}
$mysql = new MyMysqli("localhost", "my_user", "my_password", "world");
$mysql->myQuery('SELECT * FROM users WHERE login = ?', ['s' => 'admin']);
</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->query('sql', ['params']) как то лаконичние вашего выше
https://visavi.net/articles/comments/577
Очередной костыль экранирования mysqli запросовKpuTuKSat, 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 запросовKpuTuKSat, 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">
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$select = $mysqli->prepare("SELECT * FROM users WHERE login=?");
$select->bind_param("s", 'admin');
$result = $select->fetch();
</pre>
https://visavi.net/articles/comments/577
Очередной костыль экранирования mysqli запросовАртурSat, 09 Jan 2016 17:18:04 +0300Комментарииhttps://visavi.net/articles/comment/577/2177