Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / prepared statements выбирают идиоты? / 25 сообщений из 36, страница 1 из 2
16.05.2012, 19:26:36
    #37797718
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Прочитал что в веб-приложения в 95% случаев, они бесполезны. Выгоду от их использования можно ощутить только при постоянном соединении с сервером БД, так как при обычном режиме маловероятно выполнение двух одинаковых запросов. Потом нашел тесты, где происходило по 1000 инсертов, и результат с применением ф-ии mysqli_real_escape_string был лишь незначительно медленее. В случае же с удаленным серваком, получалось, что хваленные подготовленные выражения подчистую сливали обычным запросам(ясное дело их разбор происходит на стороне сервера).
...
Рейтинг: 0 / 0
16.05.2012, 19:45:39
    #37797737
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Друпалоиды тоже не используют подготовленные выражения.

Модератор: Текст ссылки изменен. Мемберу Няша ррр настоятельно рекомендуется выбирать выражения после окончания бана.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
 225 /**
 226  * Runs a limited-range query in the active database.
 227  *
 228  * Use this as a substitute for db_query() when a subset of the query is to be
 229  * returned.
 230  * User-supplied arguments to the query should be passed in as separate parameters
 231  * so that they can be properly escaped to avoid SQL injection attacks.
 232  *
 233  * Note that if you need to know how many results were returned, you should do
 234  * a SELECT COUNT(*) on the temporary table afterwards. db_num_rows() and
 235  * db_affected_rows() do not give consistent result across different database
 236  * types in this case.
 237  *
 238  * @param $query
 239  *   A string containing an SQL query.
 240  * @param ...
 241  *   A variable number of arguments which are substituted into the query
 242  *   using printf() syntax. The query arguments can be enclosed in one
 243  *   array instead.
 244  *   Valid %-modifiers are: %s, %d, %f, %b (binary data, do not enclose
 245  *   in '') and %%.
 246  *
 247  *   NOTE: using this syntax will cast NULL and FALSE values to decimal 0,
 248  *   and TRUE values to decimal 1.
 249  *
 250  * @param $from
 251  *   The first result row to return.
 252  * @param $count
 253  *   The maximum number of result rows to return.
 254  * @return
 255  *   A database query result resource, or FALSE if the query was not executed
 256  *   correctly.
 257  */
...
Рейтинг: 0 / 0
16.05.2012, 19:46:47
    #37797740
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
И это во враппере под mysqli!!!
...
Рейтинг: 0 / 0
16.05.2012, 19:47:03
    #37797741
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Речь, как я понимаю, о MySQL ?
Кроме того, нужно различать prepared statements вызваемые из клиентского приложения (например, скрипта на PHP) и вызываемые из процедур/фунций самого MySQL. Во втором случае альтернативы просто нет.
Няша рррПрочитал что в веб-приложения в 95% случаев, они бесполезны.Забор вокруг частного дома бесполезен 99,9% времени, т.к. в это время никто не пытается через него перелезть. Это не значит, что нужно от него отказываться.
Няша рррВыгоду от их использования можно ощутить только при постоянном соединении с сервером БД, так как при обычном режиме маловероятно выполнение двух одинаковых запросов.И кто ж вам запрещает использовать постоянные соединения?Няша рррПотом нашел тесты, где происходило по 1000 инсертов, и результат с применением ф-ии mysqli_real_escape_string был лишь незначительно медленнее.В это верю.Няша ррр В случае же с удаленным серваком, получалось, что хваленные подготовленные выражения подчистую сливали обычным запросам(ясное дело их разбор происходит на стороне сервера).В это не верю. Причем тут удаленность сервера?

И заголовок у вас в корне неверен. Кто-то использует prepared statements, кто-то - нет. Но это никак не коррелирует с тем, являются ли они идиотами или нет.
...
Рейтинг: 0 / 0
16.05.2012, 19:49:51
    #37797747
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
не кормите троля
...
Рейтинг: 0 / 0
16.05.2012, 19:51:31
    #37797752
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
r uне кормите троляДа, каюсь, сорвался. Больше не буду.
...
Рейтинг: 0 / 0
16.05.2012, 19:57:43
    #37797760
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
miksoft, ща ссылку найду в кеше браузера
...
Рейтинг: 0 / 0
16.05.2012, 20:06:44
    #37797773
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Пруф

Elapsed time. SQL query: 13.446207046509 sec
Elapsed time. SQL prepared each: 26.709115982056 sec
Elapsed time. SQL prepared once: 13.645385026932 sec на целых 20 миллисекунд слили!!!

И постоянное соединение, на шареде кто им даст пользоваться. Да и проблем с ним больше.
...
Рейтинг: 0 / 0
16.05.2012, 20:25:05
    #37797789
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Топикстартеру для общего развития:
http://dic.academic.ru/dic.nsf/brokgauz_efron/43917/%D0%98%D0%B4%D0%B8%D0%BE%D1%82 Идиот
(греч.) — слово это первоначально означало отдельную личность в противоположность государству. У древних греков И. преимущественно назывался тот, кто не принимал участия в государственных делах, т. е. с одной стороны частное лицо в противоположность государственному деятелю, с другой же стороны — несведущий человек, человек толпы в противоположность сведущему, посвященному, необразованный человек в противоположность образованному. Римляне разумели под И. незнающего, неопытного человека, невежду и бездарность в науках и искусствах. В настоящее время слово это обыкновенно употребляется для означения человека слабоумного, страдающего
идиотизмом (см.).

Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона. — С.-Пб.: Брокгауз-Ефрон. 1890—1907.

http://vocabulary.ru/dictionary/487/word/idiot Оксфордский толковый словарь по психологии/Под ред. А.Ребера,2002 г.

ИДИОТ От греческого idiotes, что приблизительно переводится как человек в совершенно закрытом состоянии, без знаний, таким образом (расширяя это первое значение), невежественный человек. Этот термин сейчас почти не используется: см. термин умственная отсталость, глубокая, который сейчас употреблять предпочтительнее. Обсуждение этих и связанных с ними терминов см. в статье умственная недостаточность.

Теперь, когда с идиотами вроде бы разобрались, уточните, кого Вы имели в виду? После окончания бана, разумеется.
...
Рейтинг: 0 / 0
17.05.2012, 05:32:15
    #37798087
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
>так как при обычном режиме маловероятно выполнение двух одинаковых запросов
Что, простите? СУБД кэширует план выполнения запросов. И если текст нового пришедшего запроса не меняется - он берёт его из своего кэша по обычному хэшу. Так что, не знаю как там в мускуле дела обстоят. но в слоне и оракле всё работает как надо и prepared statments быстрее обрабатываются.
...
Рейтинг: 0 / 0
17.05.2012, 10:01:19
    #37798258
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
NekZ>так как при обычном режиме маловероятно выполнение двух одинаковых запросов
Что, простите? СУБД кэширует план выполнения запросов. И если текст нового пришедшего запроса не меняется - он берёт его из своего кэша по обычному хэшу. Так что, не знаю как там в мускуле дела обстоят. но в слоне и оракле всё работает как надо и prepared statments быстрее обрабатываются.К сожалению, в MySQL область видимости подготовленного запроса - сессия.
...
Рейтинг: 0 / 0
17.05.2012, 20:53:16
    #37799861
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Модератор: Бестолковый кусок кода удален
...
Рейтинг: 0 / 0
17.05.2012, 21:10:01
    #37799875
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Мотоцикл Ямаха вместо боллида Феррари выбирают идиоты - на нем же нельзя учавствовать в Формуле-1!!!

Вот как-то так звучит тема. Что ставит под сомнение адекватность автора, а не адекватность тех, кто по его мнению что-то где-то выбирает. В общем, няшу в игнор. Это какой-то школоло, чего-то где-то нахватавшийся и дорвавшийся до PHP.

Искреннее желаю вам мощных коммерческих проектов, которые выбьют из вас дурь и заставят делом заниматься, а не сферической болтовней и писаниной.
...
Рейтинг: 0 / 0
17.05.2012, 21:17:45
    #37799880
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Edd.Dragon, хм, хочу увидеть ваши коммерческие проекты
...
Рейтинг: 0 / 0
17.05.2012, 21:21:11
    #37799890
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Кстати PHP сам по себе очень бестолковый язык, его развитие кстати застопорилось из-за дурацкой архитектуры, PHP 6 вон уже и не знают когда появится
...
Рейтинг: 0 / 0
17.05.2012, 21:34:46
    #37799905
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Няша рррEdd.Dragon, хм, хочу увидеть ваши коммерческие проекты
В моих таким "деятелям" не место

Няша рррКстати PHP сам по себе очень бестолковый язык, его развитие кстати застопорилось из-за дурацкой архитектуры, PHP 6 вон уже и не знают когда появится
У меня дежавю...
...
Рейтинг: 0 / 0
18.05.2012, 10:29:43
    #37800354
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Няша рррИ постоянное соединение, на шареде кто им даст пользоваться. Да и проблем с ним больше.
- ??? есть хостинги у которых постоянное соединение на шареде и которые не имеют с ним проблем (аккуратней надо настраивать PHP и MySQL)
...
Рейтинг: 0 / 0
18.05.2012, 12:21:41
    #37800671
prepared statements выбирают идиоты?
Kachalov, покажи мне пример использования постоянного соединения и mysqli на php чото мне подсказывает что выгоды от него не будет, так как выражение ты все равно будешь подготавливать каждый раз.
...
Рейтинг: 0 / 0
18.05.2012, 14:22:55
    #37801035
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<?php

error_reporting(E_ALL);

mysqli_report(MYSQLI_REPORT_ALL);
$link = mysqli_connect('localhost', 'root', '', 'test');

for ($i = 0; $i < 10000; ++$i) {
    mysqli_query($link, "INSERT INTO test VALUES(NULL, '" . md5(mt_rand()) . "');");
}

$diff = -microtime(1);

for ($i = 0; $i < 10000; ++$i) {
    mysqli_query($link, "SELECT * FROM test WHERE id = $i;");
}

$diff += microtime(1);
echo "<br>Простые запросы: $diff сек.";

$diff = -microtime(1);

$stmt = mysqli_prepare($link, "SELECT * FROM test WHERE id = ?;");
for ($i = 0; $i < 10000; ++$i) {
    mysqli_stmt_bind_param($stmt, 'i', $i);
    mysqli_stmt_execute($stmt);
}

$diff += microtime(1);
echo "<br>Подготовленные запросы: $diff сек.";

?>



Результаты:

Простые запросы: 0.84430003166199 сек.
Подготовленные запросы: 0.73420095443726 сек.

При тысяче проходов разница ощутимее

Простые запросы: 0.11344909667969 сек.
Подготовленные запросы: 0.074330806732178 сек.


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
$diff = -microtime(1);

for ($i = 0; $i < 1000; ++$i) {
    mysqli_query($link, "SELECT * FROM test WHERE data = '" . mysqli_real_escape_string($link, md5(mt_rand())) . "';");
}

$diff += microtime(1);
echo "<br>Простые запросы: $diff сек.";

$diff = -microtime(1);

$stmt = mysqli_prepare($link, "SELECT * FROM test WHERE data = ?;");
for ($i = 0; $i < 1000; ++$i) {
    $data = md5(mt_rand());
    mysqli_stmt_bind_param($stmt, 's', $data);
    mysqli_stmt_execute($stmt);
}

$diff += microtime(1);
echo "<br>Подготовленные запросы: $diff сек.";



Простые запросы: 0.12942290306091 сек.
Подготовленные запросы: 0.096685171127319 сек.

Чото разницы нет
...
Рейтинг: 0 / 0
18.05.2012, 14:24:58
    #37801042
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
А если запрос по сложнее?
...
Рейтинг: 0 / 0
18.05.2012, 14:30:46
    #37801059
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Где кеширование хваленное? Мне кажется всякие идиоты забывают, про то что при подготовке выражения отправляются данные на сервер, точно такде как при вызове mysqli_real_escape_string

Мало того

Простые запросы(старенький mysql): 0.83446502685547 сек.
Простые запросы(mysqli): 0.82258987426758 сек.
Подготовленные запросы(mysqli): 0.72593998908997 сек.

Вообщем я делаю вывод что это гавно замануха для всяких идиотов, чтобы последние перестали пользоваться старым расширением mysql(там непонятный и запутанный код, что усложняет работу с ним, это типа как эти клоуны начали разработку php6 и у них ничего не получилось и вообще в итоге забили).
...
Рейтинг: 0 / 0
18.05.2012, 14:33:43
    #37801068
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Код: sql
1.
2.
3.
4.
5.
6.
test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `data` varchar(32) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `data` (`data`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
...
Рейтинг: 0 / 0
18.05.2012, 14:46:10
    #37801098
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Так работать не будет:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$diff = -microtime(1);

for ($i = 0; $i < 1000; ++$i) {
    $stmt = mysqli_prepare($link, "SELECT * FROM test WHERE id = ?;");
    mysqli_stmt_bind_param($stmt, 'i', $i);
    mysqli_stmt_execute($stmt);
}

$diff += microtime(1);



Пишет:
Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'Commands out of sync; you can't run this command now' in D:\xampp\htdocs\site\test.php:43 Stack trace: #0 D:\xampp\htdocs\site\test.php(43): mysqli_prepare(Object(mysqli), 'SELECT * FROM t...') #1 {main} thrown in D:\xampp\htdocs\site\test.php on line 43

Чо то я слабо представляю как эта шняга будет работать при постоянном соединение, но подозреваю, что просто засрет кэш и уронит сервер
...
Рейтинг: 0 / 0
18.05.2012, 14:48:00
    #37801104
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
убейся плиз
...
Рейтинг: 0 / 0
18.05.2012, 14:54:19
    #37801117
Няша ррр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared statements выбирают идиоты?
Hett,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<?php

error_reporting(E_ALL);

$link = mysql_connect('localhost', 'root', '');
mysql_select_db('test');

$data = md5(mt_rand()); 

$diff = -microtime(1);
mysql_query("SELECT * FROM test WHERE data = '" . mysql_real_escape_string($data, $link) . "';", $link);
$diff += microtime(1);
echo "<br>Простой запрос(старенький mysql): $diff сек.<br><br>MySQLi:";

mysqli_report(MYSQLI_REPORT_ALL);
$link = mysqli_connect('localhost', 'root', '', 'test');

$diff = -microtime(1);
mysqli_query($link, "SELECT * FROM test WHERE data = '" . mysqli_real_escape_string($link, $data) . "';");
$diff += microtime(1);
echo "<br>Простой запрос: $diff сек.";

$diff = -microtime(1);
$stmt = mysqli_prepare($link, "SELECT * FROM test WHERE data = ?;");
mysqli_stmt_bind_param($stmt, 's', $data);
mysqli_stmt_execute($stmt);
$diff += microtime(1);
echo "<br>Подготовленные запрос: $diff сек.";

?>




Простой запрос(старенький mysql): 0.00063204765319824 сек.

MySQLi:
Простой запрос: 0.00041985511779785 сек.
Подготовленные запрос: 0.00040388107299805 сек.

Старенький секель тут сливает.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / prepared statements выбирают идиоты? / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]