ФорумПрограммированиеПыхнуть хотите?Готовые решения → Обертка DBAL::Query - переменное число аргументов и экранирование строк

Обертка DBAL::Query - переменное число аргументов и экранирование строк

  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 10:34, спустя 4 часа 12 минут 18 секунд

    во, человек-дело :)
    мне уже интересно :)
    я скундантом хочу :)
    выбирайте оружие:
    - плётки
    - сабли
    - дубинки
    - голова с мозгами
    - голова без мозгов

    на какую тему батл?
    все умрут, а я изумруд
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 11:18, спустя 43 минуты 53 секунды

    Батлы! Батлы!
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 11:28, спустя 10 минут 7 секунд

    ооо батл!!
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 13:22, спустя 1 час 54 минуты 3 секунды

    Хотите задачку!? получите, распишитесь!!!

    Напишите класс SQLBuilder
    описывать красиво не умею поэтому опишу интерфейсом


    interface ISQLBuilder{

    public function __construct();

    public function addSelect($fields);
    public function addTable($table, $join, $condition);
    public function addWhere($conditions, $statement);
    public function addOrder($column, $direction);
    public function addLimit($limit, $offset);

    public function getQuery();

    public function __destruct();

    }


    смысл в том чтобы писать запросы так

    $sqlb=new SQLBuilder();
    $sql = $sqlb->addTable("myTable1")->addTable("myTable2","LEFT OUTER", "USING(myfield)")->addWhere("myTable1Column>0")->addOrder("myTable2Column", "DESC")->addLimit(15)->getQuery();


    в результате надо получить запрос вида
    SELECT * FROM myTable1 LEFT OUTER JOIN myTable2 USING(myfield) WHERE myTable1.myTable1Column>0 ORDER BY myTable2.myTable2Column DESC LIMIT 15, 0


    0. Иметь возможность указывать параметры в произвольном порядке

    1. addSelect можно не указывать это приравнивается '*' а не 'myTable1.*, myTable2.*' но надо иметь возможность указать и такой вариант 'myTable1.*, myTable2.myTable2Column'

    2. Надо учитывать что у коллонок myTable1Column и myTable2Column могут совпадать названия поэтому префикс таблицы обязателен
    Передавать префикс через addSelect("myTable1.*") и addWhere("myTable1.myTable1Column>0") нельзя но можно передавать addWhere("myTable1Column>0", "AND", "myTable1") или через namespace на ваш выбор
    С другой стороны нельзя использовать addWhere("myTable1Column>0", "AND", "myTable1") потому что может быть выражение типа addWhere("myTable1Column=myTable2Column"), нужно придумать способ это разруливать

    3. addWhere должен принимать вложеные запросы

    Остальная реализация на ваш выбор

    При оценке учитываються параметры:
    0. Корректность работы и устойчивость к ошибкам
    1. ООП, тоесть никаких global и суперглобальных массивов использовать нельзя
    2. Количество не включенных в интерфейс возможностей
    3. Удобность, тоесть при минимальных передаваймых параметрах надо получать аксимум результата, поэтому пихать в каждую функцию имя таблицы не хорошо
    4. Скорость работы
    5. Оформление кода
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 20 декабря 2008 г. 21:13, спустя 7 часов 51 минуту 12 секунд

    sap, мне что снова тебя процитировать? там даже _рекомендации_ нет, есть описание новой возможности. так какого болта ты меня поучаешь?


    Ты ослеп? Там вообще не написано такого, чтобы использовать в качестве конструктора функцию, у которой название совпадает с названием класса. Глаза разуй, там же ясно написано, цитирую:

    PHP 5 позволяет объявлять методы-конструкторы. Классы, в которых объявлен метод-констуктор, будут вызывать этот метод при каждом создании нового объекта, так что это может оказаться полезным, чтобы, например, инициализировать какое-либо состояние объекта перед его использованием.

    Пример #1 Использование унифицированных конструкторов

    <?php
    class BaseClass {
    function __construct() {
    print "Конструктор класса BaseClass\n";
    }
    }

    class SubClass extends BaseClass {
    function __construct() {
    parent::__construct();
    print "Конструктор класса SubClass\n";
    }
    }

    $obj = new BaseClass();
    $obj = new SubClass();
    ?>



    Ты видишь здесь функцию с названием, которое совпадает с названием класса? Нет? Ах, какая жалость, что не написали два варианта на выбор с рекомендацией одного из них, а написали только один вариант. Какая тебе, нахрен, рекомендация еще надо, если старый вариант вообще не приводится в пример?

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

    У меня и так дел полно, чтобы со всякими закомплексованными личностями дуэли устраивать. Если тебе больше заняться нечем на зимних каникулах, иди в снежки поиграй, что ли. Впрочем, если ты мне оплатишь неделю труда по моим расценкам, я подумаю :)
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 20 декабря 2008 г. 21:18, спустя 5 минут 16 секунд

    И да, еще одно, ты пришел на форум. Не на свой форум, на чужой, где общаются другие люди. И вместо того, чтобы прислушаться к тому, что тебе советуют, ты начинаешь в ответ хамить, говорить маразм, причем не как собственное мнение, а как истину в последней инстанции, оскорбляешь других участников форума и делаешь вид, что ты тут самый крутой и самый умный. Я бы тебя вообще забанил за подобное поведение.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 21:25, спустя 6 минут 20 секунд

    не злитесь, лучше застрелитесь!
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 22:02, спустя 37 минут 3 секунды

    ыыы
    так хочецца минус вкарму влепить… обоим
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 20 декабря 2008 г. 22:14, спустя 11 минут 50 секунд


    ыыы
    так хочецца минус вкарму влепить… обоим

    Чего не влепишь?)) (я не прошу, если что)))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 22:41, спустя 27 минут 9 секунд



    ыыы
    так хочецца минус вкарму влепить… обоим

    Чего не влепишь?)) (я не прошу, если что)))
    типа "чо не влепишь дуду?" ))))))))))))))))))))))))
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 22:45, спустя 4 минуты 3 секунды

    патаму что ты прав, патаму что я иногда тоже кричу)))
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 22:46, спустя 1 минуту 3 секунды

    phpdude, эго свое умерь))) второй не ты, а артудету
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 22:55, спустя 8 минут 48 секунд


    phpdude, эго свое умерь))) второй не ты, а артудету
    жаль. думал мне) ну пох)))
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 20 декабря 2008 г. 23:01, спустя 6 минут 27 секунд

    phpdude, не ну если ты просишь)))
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 20 декабря 2008 г. 23:13, спустя 12 минут 18 секунд




    ыыы
    так хочецца минус вкарму влепить… обоим

    Чего не влепишь?)) (я не прошу, если что)))
    типа "чо не влепишь дуду?" ))))))))))))))))))))))))

    Как тебе сказал Мавр, второй не ты))

Пожалуйста, авторизуйтесь, чтобы написать комментарий!