Forum Webscript.Ru
Программирование => PHP => Тема начата: 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? Или есть выход?
-
Есть.
Например, использовать placeholder\'ы (http://www.dklab.ru/lib/Database_Placeholder/).
Или написать свою функцию «prepare».
Но в любом случае (и на Perl\'е так было) будет выполняться новый запрос.
-
Vladn
Получается, для каждого значения нужно заново вызывать mysql_query?
нет.
Надо заменить этот дурацкий код на ОДИН запрос, который выберет все нужные значения.
-
RomikChef:
Надо заменить этот дурацкий код на ОДИН запрос, который выберет все нужные значения.
Указанный запрос я привел в качестве примера. В реальности я использую prepare в том случае, когда необходимо прочитать много строчек из файла, обработать и добавить в таблицу. Формировать один огромный запрос в таком случае я считаю бессмысленным, а prepare и execute делают как раз то, что нужно.
-
hanslinger
Спасибо за ссылку! Именно то, что нужно было!
-
Vladn:
Указанный запрос я привел в качестве примера.
вот в следующий раз будешь думать, какой приводить пример - осмысленный или дурацкий.
Vladn:
когда необходимо прочитать много строчек из файла, обработать и добавить в таблицу.
опять мимо.
подставлять в строку запроса значения в цикле умеет даже ребёнок
придумай ещё что-нибудь
-
RomikChef
Придумывать ничего не нужно. Здесь (http://www.dklab.ru/lib/Database_Placeholder/) всё подробно объяснено. Даже ребёнок поймёт.
-
Vladn ты по жизни такой эээ... непонятливый?
Или только здесь комедию ломаешь?
столь обожаемый тобой код "вызывает mysql_query заново для каждого значения" - то есть, делает то, что тебе ужасно не нравилось. просто обёртывая этот вызов в красивый фантик.
Так вот ты определись.
Либо сообрази, что в таком вызове нет ничего ужасного, либо тебе придётся снова скрипеть мозгами, чтобы сформулировать, из какой ситуации тебе понадобился "выход".
-
RomikChef
Смысл не в скорости исполнения, не в красивом фантике, а в безопасности формируемого Sql-запроса: или я готовлю запрос "select * from table where login=$login" и ломаю голову, чтобы пользователь не взломал БД с помощью хитрого параметра $login, либо использую prepare и execte (или placeholderы в php) и избавляюсь от головной боли.
-
о.
наконец-то что-то осмысленное.
правда, про головную боль ты загнул.
"select * from table where login=\'".mysql_real_escape_string($login)."\'"
и ничего нигде не болит.
но тем не менее, безопасность - реальная причина пользовать плейсхолдеры, а не высосанная из пальча.
больше вопросов не имею
-
RomikChef
и ничего нигде не болит.
Ага, а когда полей будет 5-10, во что превратиться этот запрос? Уж лучше placeholderы.
-
Vladn
такая вещь, как цикл, решит все твои выдуманные проблемы =)
ну кто тебе мешает чуть-чуть подумать перед тем, как писать? =)
-
RomikChef
Мне очень понравился ответ hanslinger: он сразу вник в суть дела, коротко и ясно дал необходимую информацию. Ему за это большой респект.
Дальше продолжать не буду - и так ясно, о чём хочу сказать.
-
нет, неясно.
в том-то и дело, что пишешь ты СОВЕРШЕННО неясно.
а я тебя в это носом тыкаю.
чтобы ты хоть немного поучился думать.
Это ты считаешь, что форум - это бесплатная справочная служба, которая обязана молча решать твои проблемы и не задавать лишних вопросов.
а я считаю, что форум - это место, где можно узнать что-то новое.
Вот ты, например, не умеешь мыслить логически. И тебе следует в первую очередь поучиться именно этому, а не хватать готовые заплатки, не понимая, зачем они нужны.
-
ты привёл здесь уже около 5 причин, по которым тебе совершенно необходим этот механизм.
при том, что ты не понимаешь - ни зачем он нужен, ни как он работает.
при том, что причины эти высосаны из пальца.
-
хватать готовые заплатки, не понимая, зачем они нужны.
RomikChef совершенно прав.
Дело в следующем: он хочет тебя чему-то научить. Я даю ответ на поставленный вопрос. Если ты не дурак, то примешь ответ на вопрос и поразмыслишь на тему того, что говорит RomikChef. В обратном случае хватит placeholder\'ов — делай с ними все, что угодно.