Автор Тема: Подготовка MySql-запроса  (Прочитано 9695 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vladn

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://mod-site.net/ru/
Подготовка MySql-запроса
« : 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? Или есть выход?
 - мои гостевушки MBook

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Подготовка MySql-запроса
« Ответ #1 : 26 Января 2006, 11:05:09 »
Есть.
Например, использовать placeholder\'ы.
Или написать свою функцию «prepare».
Но в любом случае (и на Perl\'е так было) будет выполняться новый запрос.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Подготовка MySql-запроса
« Ответ #2 : 26 Января 2006, 11:40:37 »
Vladn
Цитировать
Получается, для каждого значения нужно заново вызывать mysql_query?

нет.
Надо заменить этот дурацкий код на ОДИН запрос, который выберет все нужные значения.

Оффлайн Vladn

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://mod-site.net/ru/
Подготовка MySql-запроса
« Ответ #3 : 26 Января 2006, 18:38:58 »
Цитировать
RomikChef:
Надо заменить этот дурацкий код на ОДИН запрос, который выберет все нужные значения.

Указанный запрос я привел в качестве примера. В реальности я использую prepare в том случае, когда необходимо прочитать много строчек из файла, обработать и добавить в таблицу. Формировать один огромный запрос в таком случае я считаю бессмысленным, а prepare и execute делают как раз то, что нужно.
 - мои гостевушки MBook

Оффлайн Vladn

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://mod-site.net/ru/
Подготовка MySql-запроса
« Ответ #4 : 26 Января 2006, 18:51:56 »
hanslinger
Спасибо за ссылку! Именно то, что нужно было!
 - мои гостевушки MBook

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Подготовка MySql-запроса
« Ответ #5 : 26 Января 2006, 20:05:38 »
Цитировать
Vladn:
Указанный запрос я привел в качестве примера.

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

опять мимо.
подставлять в строку запроса значения в цикле умеет даже ребёнок
придумай ещё что-нибудь

Оффлайн Vladn

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://mod-site.net/ru/
Подготовка MySql-запроса
« Ответ #6 : 28 Января 2006, 08:22:06 »
RomikChef
Придумывать ничего не нужно. Здесь всё подробно объяснено. Даже ребёнок поймёт.
 - мои гостевушки MBook

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Подготовка MySql-запроса
« Ответ #7 : 28 Января 2006, 10:57:35 »
Vladn ты по жизни такой эээ... непонятливый?
Или только здесь комедию ломаешь?

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

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

Оффлайн Vladn

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://mod-site.net/ru/
Подготовка MySql-запроса
« Ответ #8 : 28 Января 2006, 18:04:17 »
RomikChef
Смысл не в скорости исполнения, не в красивом фантике, а в безопасности формируемого Sql-запроса: или я готовлю запрос "select * from table where login=$login" и ломаю голову, чтобы пользователь не взломал БД с помощью хитрого параметра $login, либо использую prepare и execte (или placeholderы в php) и избавляюсь от головной боли.
 - мои гостевушки MBook

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Подготовка MySql-запроса
« Ответ #9 : 28 Января 2006, 22:24:47 »
о.
наконец-то что-то осмысленное.

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

но тем не менее, безопасность - реальная причина пользовать плейсхолдеры, а не высосанная из пальча.
больше вопросов не имею

Оффлайн Vladn

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://mod-site.net/ru/
Подготовка MySql-запроса
« Ответ #10 : 28 Января 2006, 22:37:54 »
RomikChef
Цитировать
и ничего нигде не болит.
Ага, а когда полей будет 5-10, во что превратиться этот запрос? Уж лучше placeholderы.
 - мои гостевушки MBook

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Подготовка MySql-запроса
« Ответ #11 : 28 Января 2006, 22:59:27 »
Vladn
такая вещь, как цикл, решит все твои выдуманные проблемы =)
ну кто тебе мешает чуть-чуть подумать перед тем, как писать? =)

Оффлайн Vladn

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://mod-site.net/ru/
Подготовка MySql-запроса
« Ответ #12 : 28 Января 2006, 23:07:38 »
RomikChef
Мне очень понравился ответ hanslinger: он сразу вник в суть дела,  коротко и ясно дал необходимую информацию. Ему за это большой респект.
Дальше продолжать не буду - и так ясно, о чём хочу сказать.
 - мои гостевушки MBook

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Подготовка MySql-запроса
« Ответ #13 : 28 Января 2006, 23:33:16 »
нет, неясно.
в том-то и дело, что пишешь ты СОВЕРШЕННО неясно.
а я тебя в это носом тыкаю.
чтобы ты хоть немного поучился думать.

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

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

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Подготовка MySql-запроса
« Ответ #14 : 28 Января 2006, 23:36:01 »
ты привёл здесь уже около 5 причин, по которым тебе совершенно необходим этот механизм.
при том, что ты не понимаешь - ни зачем он нужен, ни как он работает.
при том, что причины эти высосаны из пальца.

 

Sitemap 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