Forum Webscript.Ru
Программирование => PHP => Тема начата: Nicki от 30 Января 2004, 12:56:06
-
Как будет правильнее организовать работу с запросами к MySQL?
Сейчас у меня запрос вписывается прямо в функцию mysql_query(), т.е. так:
$result = mysql_query("SELECT col1,col2,col3 FROM table WHERE col4 =".$x." AND col6=".$y)
Но, иногда в туторах мелькают ссылки на классы для работы с запросами. Может работать с запросами
правильнее при помощи классов. Поэтому, я начал было делать класс для работы с запросами,
пока только для SELECT\'а. Теперь, у меня получается что то вроде этого:
// предварительно я передаю данные о запросе в класс
$dbSelect->selData["table"] = "table";
$dbSelect->selData["cols"] = "col1,col2,col3";
$dbSelect->selData["where"] = "col4 =".$x." AND col6=".$y;
// дальше, при необходимости, в том же духе идут "groupBy", "orderBy" и "limit"
// а в функции mysql_query() стоит вызов метода класса (т.е. из того самого класса для работы с запросами)
// в результате возвращается запрос, составленный из переданных в класс данных
$result = mysql_query($dbSelect->createQuery());
Но меня что-то стали посещать сомнения о рациональности такого способа. По моему он довольно
тормозной. Ведь для того, чтбы составить запрос, нужно передать в класс данные по запросу,
вызвать метод из класса, который, в конечном итоге, вернет готовый запрос. А перед этим, нужно еще передать
экземпряр объекта в функцию из которой будет вызываться метод класса. ... блин, как все запутано.
Посоветуйте правильный способ. Как вообще принято работать с запросами?
-
Правильные тебя сомнения посещают.
любые действия надо производить, только если они тебе действительно нужны и ты понимаешь - зачем.
писать генератор селектов - глупо.
Имеет смысл писать генератор инсетров и апдейтов - там много рутинной работы.
я, кстати, совсем недавно на этом форуме написал прекрасный пример для составления запроса апдейта. Можешь посмотреть
А с селектами ты теряешь ОЧЕНЬ важное качество языка SQL - читабельность.
единственное замечание - запрос всегда надо писать не сразу в функцию, а в переменную ,а потом - в мускул_квери
ЗЫ. писать отдельный класс для селекта - тоже глупо. уже с тояки зрения ооп :-)
-
RomikChef:
единственное замечание - запрос всегда надо писать не сразу в функцию, а в переменную ,а потом - в мускул_квери
Обьясни?
-
переменную легче вывести при отладке
-
CGVictor
Хм, логично. Просто я отладкой не слишком часто пользуюсь.
/и, наверное, из-за этого так часто торчу на форуме :)/
-
а что ты делаешь, если запрос не работает.
просто интересно?
угадываешь?
-
RomikChef:
а что ты делаешь, если запрос не работает.
просто интересно?
угадываешь?
По большому счету, да...
Есть, конечно, phpMyAdmin с его парсерами, но в целом...
-
Nicki
http://dklab.ru/chicken/nablas/30.html
будет интересно
-
CGVictor
А это у тебя все сразу получается?
Без ошибочек?
-
RomikChef:
ЗЫ. писать отдельный класс для селекта - тоже глупо. уже с тояки зрения ооп :-)
Ромик, а где можно почитать об ООП. Я очень посредственно представляю себе принципы ООП программинга, изучал их, только по учебникам PHP, и то, там только вскольз. А это, насколько я понимаю, одино из важнейших направлений в программировании вообще.
И еще на счет mysql_query(). После самого запроса пишется идентификатор соединения. Это обязательно, или можно опускать? Кчему это может привести?
-
Nicki
не знаешь ООП - не используй. Тебя же никто не заставляет.
Тем более что ты толком то и ПХП пока не изучил.
ЗЫ
а почитать можно
Гради Буч "Объектно-Ориентированный анализ и Проектирование" (вроде так)
-
Petroffs
В большинстве случаев, как это ни странно, да. Чаще проблемы логического плана, чем ошибки в написании запросов.
-
Nicki Со временем, получив немного опыта, ты начнешь понимать что некоторые данные нужно объеденить с методами их обрабатывающими. И ты будешь готов пожертвовать скоростью, во имя красоты, читабельности и универсальности кода. Тогда у тебя родится класс. Или не будешь готов, тогда он не родится :) Многие программисты вообще ООП не используют.