Конструктор SQL-запросов на PHP. Есть у кого?

Коля Дубр
На сайте с 02.03.2005
Offline
153
5426

Я когда-то давно, скорее даже в целях изучения ООП, состряпал класс, который собирает SQL-запросы. Это удобно, когда идут сложные запросы, зависящие от пользовательского ввода или еще чего-нибудь. Т.е. это не слой абстракции, который нужен, чтоб не менять вызовы mysql_*** в случае перехода на другую СУБД, а именно сборщик запросов. Работает примерно так:


$q = new sql_q('table', 'select'); // SELECT * FROM `table`
$q->select('id', 'field_two'); // уточняем: SELECT `id`, `field_two`
$q->cond('field_one', 'pattern'); // WHERE `field_one` = 'pattern'
$q->cond('field_two', 'patt', 'regexp', 'and'); // AND `field_two` REGEXP 'patt'
$q->limit(4, 6); // LIMIT 4, 6
$q->order('field_two', 'desc'); // ORDER BY `field_two` DESC
echo $q->toString(); // Показывает получившийся запрос

Но толком его так и не доделал. Например, отсутствуют такие фичи, как:

- группировка условий

- полноценные методы для объединения таблиц

- проверка допустимости запроса

Сейчас подумал, что такие вещи уже давно должны быть написаны (такого рода классы видел в нескольких скриптах, но тоже без вышеназванного функционала). Решил найти что-нибудь подходящие. Но, перерыв весь http://phpclasses.org/ так ничего и не нашел, все похожие на правду классы совсем примитивны.

Народ, подскажите, существует ли толковое решение, или придется дописывать свое? Заранее спасибо.

Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
dkameleon
На сайте с 09.12.2005
Offline
386
#1

http://pear.php.net/packages.php?catpid=7&catname=Database

Хдесь ещё есть парочка.

Когда-то наткнулся, но так и не пользовался :)

Дизайн интерьера (http://balabukha.com/)
psylosss
На сайте с 23.12.2005
Offline
126
#2

у меня есть два самописных класса, которые вобщем, справляются с этой задачей. Куда отправить?

Веб-разработка. Сложные проекты. Проектирование. Проект-менеджмент. Стартапы.
[Удален]
#3

PEAR::DB_DataObject - давно уже придумано.

ИМХО, конструировать запросы как раз-таки недобно. Сам по себе написанный SQL-запрос является лучшим комментарием. По запросу понятно о чем идет речь и что делается. Особенно ощущается в команде, когда другой программист пытается понять, что за запрос сконструирован. Отсюда возникает необходимость дополнительного написания методов трассировки и прочего.

Для совместимости же - мускул и так совместим со всем. Все остальное же пишите в соответствии с ANSI SQL и проблем не будет. В коннекте к БД поменяете строчку - вот вам и другая СУБД.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий