Православный коннект а базе данных

Фанат

oncle terrible
Команда форума
И зачем использовать процедурные методы когда есть класс mysqli? Его перегрузил и дополнил своими методами
У нас на проджекте есть уже вот такой класс похожу, он со временем превращается в ужос, с постоянной допилкой.
Слушай, это очень важная тема.
А можешь привести пример таких допилок?
Я, сначала, тоже хотел встраиваться в mysqli. Но потом решил наоборот - отвязаться полностью.
в итоге у меня сильно ограничен функционал по сравнению с mysqli. И вот я как раз думаю - чего может не хватать?
 

Beavis

Banned
Совершенствоваться можно бесконечно. Нужны ещё еррор хендлер, ексепшен хендлер, и далее везде - прямой дорогой к фреймворку %)
Да, главное делать все компоненты максимально независимыми и разделенными на уровни, тогда можно будет использовать "совершенство" настолько, насколько нужно.
 

Фанат

oncle terrible
Команда форума
Да, главное делать все компоненты максимально независимыми и разделенными на уровни, тогда можно будет использовать "совершенство" настолько, насколько нужно.
Ну вот я пока не очень понимаю принцип этого разделения...
Пул отдельно, DBAL отдельно.
Кость, у тебя обычно получается мне втолковать. можешь попа дробнее? :)
 

Vladson

Сильнобухер
За образец сейчас считают PDO
Ну в этом топике только я считаю (и то не считаю, а просто высказался что штука простая и удобная во многих случаях) так что не стоит это воспринимать как истину высшей инстанции...
 

Василий М.

Новичок
PHP:
Krugozor_Database_Mysql::create(
                        Krugozor_Registry::getInstance()->DATABASE['HOST'],
                        Krugozor_Registry::getInstance()->DATABASE['USER'],
                        Krugozor_Registry::getInstance()->DATABASE['PASSWORD']
                    )->setDatabaseName(Krugozor_Registry::getInstance()->DATABASE['NAME'])
                     ->setCharset(Krugozor_Registry::getInstance()->DATABASE['CHARSET']);
м?
 

serglt

Анус, ой, Ахтунг
Ну смотри, конкретный пример, коллеги создали класс, точно так же, в нем дескриптор соединения, в методах вызываются функции mysqli_*, с дескриптором соединения.
Изначально в этой поделке не было даже метода insert_id () тоесть они вызывали этот метод прямо в коде mysqli_insert_id ($sql -> connection);
Пока он добавился код оброс вот такими конструкциями.
А случаи бывают разные, вон скока методов в классе.
Тоесть если тебе понадобился вдруг какой то вызов, придется допиливать библиотеку.
Смысл заворачивать функции в класс на пхп, если оно уже завернуто в расширении?
Гибче будет просто наследование существующего с добавлением своих методов.
 

craz

Нестандартное звание
PHP:
Krugozor_Database_Mysql::create(
                        Krugozor_Registry::getInstance()->DATABASE['HOST'],
                        Krugozor_Registry::getInstance()->DATABASE['USER'],
                        Krugozor_Registry::getInstance()->DATABASE['PASSWORD']
                    )->setDatabaseName(Krugozor_Registry::getInstance()->DATABASE['NAME'])
                     ->setCharset(Krugozor_Registry::getInstance()->DATABASE['CHARSET']);
м?
И SQL тоже КАПСОМ так быстрее выполняется)
 

Фанат

oncle terrible
Команда форума
Ну в этом топике только я считаю
На стаковерфлое это просто икона, на которую молятся (правда, как я подозреваю - именно что молятся, но не используют :)
Ты лучше посмотри, плиз, я тебе два поста написал, но забыл процитировать, на прошлой странице, про те недостатки, которые, на мой взгляд, есть в ПДО, и как можно сделать лучше.
я там нигде не наврал?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Про проблемы перегрузки результата в PDO я уже писал, и Тони тогда сказал что это документированный баг, превращенный в фичу. :)
 

MiksIr

miksir@home:~$
Это совершенно естественная реакция! потому что понятие проверки по белому списку - НОВОЕ для пхп разработчиков. При том, что оно ключевое для безопасности, когда мы работаем с именами полей и таблиц.
Гм? Любой фреймворк возьмите.

А про PDO... прсто не нужно ждать от PDO чем оно не является. PDO и не должно у вас что-то проверять. Оно по сути даже биндить не должно - просто это очень удобно, что некоторые умные разработчки заложили это уже в базу. PDO - это абстракция над множеством драйверов баз. Не для того, что бы вы легко базу сменили, а для того, что работая в одном проекте с мускулем, а в другом с постгресом - не требовалось зоопарка комадн разных драйверов.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
флоппик
Смотрим внимательнее первую страницу там есть перегрузка
Я бы не назвал это перегрузкой. Это обертка.
Вот в ПДО есть честная перезагрузка результата — через PDO::setAttribute() я могу задать, какой класс будет выполнять роль результата.
PDO::ATTR_STATEMENT_CLASS: Set user-supplied statement class derived from PDOStatement. Cannot be used with persistent PDO instances. Requires array(string classname, array(mixed constructor_args)).
А в вашем случае по факту два объекта с одинаковыми данными, просто, основной спрятан в более управляемом. Это — обертка, кмк.
 

MiksIr

miksir@home:~$
И да, в PDO нет таких вещей порой, которые... ну удивляют. Какими шаманствами я делал реконнект к базе на PDO... это ад.
 

craz

Нестандартное звание
craz
Это совершенно естественная реакция! потому что понятие проверки по белому списку - НОВОЕ для пхп разработчиков. При том, что оно ключевое для безопасности, когда мы работаем с именами полей и таблиц.
Это такая вещь, которую надо запомнить.
Впрочем, как я говорил уже выше, если есть контроль входящих параметров, то и проверка такая не понадобится.
В самом худшем случае, если даже мы пропустим поле без проверки, то получим ошибку запроса (Нет такого поля), но инъекции все равно не будет.
поверю на слово, и попытаюсь где-то найти упоминание для других языков, спасиб.
 

Фанат

oncle terrible
Команда форума
Я здесь не в той позиции, чтобы критиковать.
Впрочем, и без меня критиков найдется. Вечером посмотрю поподробнее. Но в целом мне разделение на стейтмент и резалт не нарвится.
 
Сверху