Forum Webscript.Ru

Программирование => PHP => Тема начата: Vladn от 26 Января 2006, 10:07:05

Название: Подготовка MySql-запроса
Отправлено: Vladn от 26 Января 2006, 10:07:05
В перле это было так:
$sth=$dbh->prepare("SELECT * FROM table WHERE id=?");
$sth->execute(10);
...
$sth->execute(20);
...
$sth->execute(30);
...


Т.е. запрос подготавливается, а затем исполняется с изменяемыми значениями.
А в PHP я нашел только msyql_query("SELECT * FROM table WHERE id=10\');
Получается, для каждого значения нужно заново вызывать mysql_query? Или есть выход?
Название: Подготовка MySql-запроса
Отправлено: hanslinger от 26 Января 2006, 11:05:09
Есть.
Например, использовать placeholder\'ы (http://www.dklab.ru/lib/Database_Placeholder/).
Или написать свою функцию «prepare».
Но в любом случае (и на Perl\'е так было) будет выполняться новый запрос.
Название: Подготовка MySql-запроса
Отправлено: Меняздесьдавнонет от 26 Января 2006, 11:40:37
Vladn
Цитировать
Получается, для каждого значения нужно заново вызывать mysql_query?

нет.
Надо заменить этот дурацкий код на ОДИН запрос, который выберет все нужные значения.
Название: Подготовка MySql-запроса
Отправлено: Vladn от 26 Января 2006, 18:38:58
Цитировать
RomikChef:
Надо заменить этот дурацкий код на ОДИН запрос, который выберет все нужные значения.

Указанный запрос я привел в качестве примера. В реальности я использую prepare в том случае, когда необходимо прочитать много строчек из файла, обработать и добавить в таблицу. Формировать один огромный запрос в таком случае я считаю бессмысленным, а prepare и execute делают как раз то, что нужно.
Название: Подготовка MySql-запроса
Отправлено: Vladn от 26 Января 2006, 18:51:56
hanslinger
Спасибо за ссылку! Именно то, что нужно было!
Название: Подготовка MySql-запроса
Отправлено: Меняздесьдавнонет от 26 Января 2006, 20:05:38
Цитировать
Vladn:
Указанный запрос я привел в качестве примера.

вот в следующий раз будешь думать, какой приводить пример - осмысленный или дурацкий.
Цитировать
Vladn:
когда необходимо прочитать много строчек из файла, обработать и добавить в таблицу.

опять мимо.
подставлять в строку запроса значения в цикле умеет даже ребёнок
придумай ещё что-нибудь
Название: Подготовка MySql-запроса
Отправлено: Vladn от 28 Января 2006, 08:22:06
RomikChef
Придумывать ничего не нужно. Здесь (http://www.dklab.ru/lib/Database_Placeholder/) всё подробно объяснено. Даже ребёнок поймёт.
Название: Подготовка MySql-запроса
Отправлено: Меняздесьдавнонет от 28 Января 2006, 10:57:35
Vladn ты по жизни такой эээ... непонятливый?
Или только здесь комедию ломаешь?

столь обожаемый тобой код "вызывает  mysql_query заново для каждого значения" - то есть, делает то, что тебе ужасно не нравилось. просто обёртывая этот вызов в красивый фантик.

Так вот ты определись.
Либо сообрази, что в таком вызове нет ничего ужасного, либо тебе придётся снова скрипеть мозгами, чтобы сформулировать, из какой ситуации тебе понадобился "выход".
Название: Подготовка MySql-запроса
Отправлено: Vladn от 28 Января 2006, 18:04:17
RomikChef
Смысл не в скорости исполнения, не в красивом фантике, а в безопасности формируемого Sql-запроса: или я готовлю запрос "select * from table where login=$login" и ломаю голову, чтобы пользователь не взломал БД с помощью хитрого параметра $login, либо использую prepare и execte (или placeholderы в php) и избавляюсь от головной боли.
Название: Подготовка MySql-запроса
Отправлено: Меняздесьдавнонет от 28 Января 2006, 22:24:47
о.
наконец-то что-то осмысленное.

правда, про головную боль ты загнул.
"select * from table where login=\'".mysql_real_escape_string($login)."\'"
и ничего нигде не болит.

но тем не менее, безопасность - реальная причина пользовать плейсхолдеры, а не высосанная из пальча.
больше вопросов не имею
Название: Подготовка MySql-запроса
Отправлено: Vladn от 28 Января 2006, 22:37:54
RomikChef
Цитировать
и ничего нигде не болит.
Ага, а когда полей будет 5-10, во что превратиться этот запрос? Уж лучше placeholderы.
Название: Подготовка MySql-запроса
Отправлено: Меняздесьдавнонет от 28 Января 2006, 22:59:27
Vladn
такая вещь, как цикл, решит все твои выдуманные проблемы =)
ну кто тебе мешает чуть-чуть подумать перед тем, как писать? =)
Название: Подготовка MySql-запроса
Отправлено: Vladn от 28 Января 2006, 23:07:38
RomikChef
Мне очень понравился ответ hanslinger: он сразу вник в суть дела,  коротко и ясно дал необходимую информацию. Ему за это большой респект.
Дальше продолжать не буду - и так ясно, о чём хочу сказать.
Название: Подготовка MySql-запроса
Отправлено: Меняздесьдавнонет от 28 Января 2006, 23:33:16
нет, неясно.
в том-то и дело, что пишешь ты СОВЕРШЕННО неясно.
а я тебя в это носом тыкаю.
чтобы ты хоть немного поучился думать.

Это ты считаешь, что форум - это бесплатная справочная служба, которая обязана молча решать твои проблемы и не задавать лишних вопросов.

а я считаю, что форум - это место, где можно узнать что-то новое.
Вот ты, например, не умеешь мыслить логически. И тебе следует в первую очередь поучиться именно этому, а не хватать готовые заплатки, не понимая, зачем они нужны.
Название: Подготовка MySql-запроса
Отправлено: Меняздесьдавнонет от 28 Января 2006, 23:36:01
ты привёл здесь уже около 5 причин, по которым тебе совершенно необходим этот механизм.
при том, что ты не понимаешь - ни зачем он нужен, ни как он работает.
при том, что причины эти высосаны из пальца.
Название: Подготовка MySql-запроса
Отправлено: hanslinger от 29 Января 2006, 01:03:16
Цитировать
хватать готовые заплатки, не понимая, зачем они нужны.

RomikChef совершенно прав.
Дело в следующем: он хочет тебя чему-то научить. Я даю ответ на поставленный вопрос. Если ты не дурак, то примешь ответ на вопрос и поразмыслишь на тему того, что говорит RomikChef. В обратном случае хватит placeholder\'ов — делай с ними все, что угодно.