Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Здравствуйте. Читая ответы на форумах касательно PDO, многие пишут что PDO, что MySQLi использовать "напрямую" нельзя, мол писать/использовать готовую "обёртку", однако не в каких мануалах про PDO или же MySQLi ни сказано ничего про это.
Единственный плюс для меня использовать "обёртку" - это удобная обработка ошибок.
Где же истина? Подскажите пожалуйста.
Если же действительно лучше использовать обертку, то - какую лучше?
И еще, является ли нормальной практикой использовать PDO никак не обрабатывая исключения которые он бросает? Т.е. вообще не использовать блоки try/catch в коде при работе с PDO.
Ибо прочитав хорошую статью, автор явно подметил что "примеры обработки исключений, точнее не обработка, а тупо вывод ошибки на экран, не является нормально и если не знаешь как правильно это сделать, лучше не использовать вообще try/catch, ибо просто вывести ошибку на экран PHP и так сам сможет".
Поэтому возник такой вот вопрос.
Ts.Saltan
Отправлено: 25 Февраля, 2015 - 22:32:50
Посетитель
Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013 Откуда: Belarus
Помог: 22 раз(а)
ex.engine пишет:
Читая ответы на форумах касательно PDO, многие пишут что PDO, что MySQLi использовать "напрямую" нельзя, мол писать/использовать готовую "обёртку", однако не в каких мануалах про PDO или же MySQLi ни сказано ничего про это.
Нагло врут, порою обёртки только нагромождают код и тормозят его выполнение. Одно из основных преимуществ mysqli и pdo - подготовленные выражения, можно для экономии места, чтоб не плодить строки типа
И еще, является ли нормальной практикой использовать PDO никак не обрабатывая исключения которые он бросает? Т.е. вообще не использовать блоки try/catch в коде при работе с PDO.
Вообще, неcпойманное исключения == неработоспособность сайта, поэтому я практикую такую вещь, вся основная логика приложения оборачивается try-catch, и в случае исключения выводится какой-нибудь текст, мол, что-то сломалось.
Хотя, никто не запрещает в той же обёртке ловить исключения.
Anguis
Отправлено: 25 Февраля, 2015 - 22:50:33
Частый гость
Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Помог: 2 раз(а)
ex.engine, у PDO есть настройки. Сброс исключений можно включить или отключить. Если уж не нравятся исключения. На мой взгляд исключения - вещь мега полезная, кругом их использую.
Что касается оберток. Ну я допустим использую в своих приложениях и обертки и напрямую PDO. Т.е. если простой запрос - то зачем лишние нагромаждения? Зразу засунул его в ->query и все, а когда нужно что-то сложное, тогда да. Обертка, которая сама собирает запрос из подготовленных приложений, используя безопасный prepare и execute
ex.engine
Отправлено: 25 Февраля, 2015 - 23:15:54
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Ts.Saltan, то есть, по сути обёртка это просто некое удобство правильно я понимаю?
Anguis, да я так и делаю при инициализации подключения. Режим в котором PDO бросает исключения вроде как ERRMODE_EXCEPTION да? Вещь то да, полезная, если знать как правильно воспользоваться. Пока что у меня с этим не очень.
Скажите, а есть ли вообще смысл использовать PDO если на проекте никогда не будет меняться СУБД? Сам использую его из-за хорошего функционала и безопасности. До этого использовал MySQLi, сначала процедурный, потом ОО.
Т.е. сразу переменной даёшь значение отправив только сам запрос и данные. При этом я не задумываюсь как это работает.
Вот есть у меня CMS. Когда-то она работала на MySQL. Потом я переделал обёртку на MySQLi. Сейчас переписываю на PDO. При этом меняется только обёртка, а не все запросы по всему проекту.
Второй плюс - это когда обёртка адаптирована под конкретный проект. А так как любой проект имеет определённый набор очень частых запросов, то просто в обёртке создать дополнительный метод, например:
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
PDO само по себе обёртка. Для большинства мелких и средних проектов его вполне достаточно. В некоторых случаях имеет смысл сделать свою обертку (дочерний класс), для PDO, что бы добавить какой то дополнительный функционал, например: пагинацию, отладку запросов и т.д.
GoDr пишет:
$cat_count = $db->countCat($id_cat);
Архитектурная ошибка. Драйвер базы данных не должен знать ничего про категории и другие сущности системы. Имхо.
GoDr
Отправлено: 26 Февраля, 2015 - 12:28:35
Посетитель
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Помог: 17 раз(а)
Ch_chov, это как пример расширения основной "обёртки" для конкретного проекта всего-лишь Запрос утрирован конечно, но можно добавить в запрос таблицу, поле, и что хотим (MAX, MIN, COUNT)
Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
Спасибо большое за ответы и пояснения. Скажите а есть ли готовые хорошие обертки для PDO или же MySQLi? (SafeMySQL что-то не впечатлила), подскажите пожалуйста.
Поработав всю ночь с PDO я понял что обертка нужна хотя бы как минимум для нормальной обработки ошибок. А то как-то не хорошо при ошибки SQL запроса или т.п. получать постоянно Fatal error'ы, если использовать напрямую.
GoDr пишет:
В проектах почти никогда не меняется СУБД
Смысл использования PDO вовсе не в смене типа базы данных.
Мнений много просто, кто-то говорит так, кто-то сяк. И поэтому при изучении возникает проблема в том, кого слушать то.
Официальные мануалы я конечно читал, но там настолько банальные примеры, что даже не знаю как они могут помочь. Нормального пояснения там нет. ИМХО.
Уже настолько запутался как же правильно работать с данными драйверами, что нет нет приходят страшные мысли о том чтобы использовать процедурный стиль MySQLi , там-то всё понятно, и даже не надо никаких мануалов.
GoDr
Отправлено: 26 Февраля, 2015 - 18:33:13
Посетитель
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
GoDr, спасибо. Интересная обёртка, сейчас буду тестировать.
Скажите, конструктор там приватный, то есть создать объект этого класса создать нельзя?
Обращение только через статический метод Init(), а он уже как я понимаю создает объект внутри самого класса?
Когда не указан путь до файла конфига выдает. Fatal error: in D:\Web\OpenServer\domains\localhost\gddatabase.php on line 91
Я сначала не понял в чем дело, так как в ошибке то ничего не указано кроме строки.
91 строка это throw new Exception(_EXCEP_ISNOT_FILECONFIG);, найдя эту константу только по ее значению я понял в чем дело) Почему не выводит ее значение а выбивает странную ошибку? Так и должно быть?
Не понял, тут кэширование встроено? Просто у меня memcache используется, то есть можно теперь не использовать его как я понимаю. Количество кода сократится, радует.
Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015 Откуда: Тамбов
Помог: 17 раз(а)
ex.engine, наверное пиши или в личку или в отдельную тему Как говорится один вопрос - одна тема ...
Ошибки всегда будут пока не настроишь конфигурацию. Настроишь конфигурацию и всё будет понятно. Это с любой базой (обёрткой). Кеш можешь использовать, можешь не использовать. Всё зависит от запросов, не всегда же кеш выгодно. Кеш файловый. Настройки, константы и т.п. вынесены с целью лучшей интеграции в свои проекты
Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2015
Помог: 0 раз(а)
GoDr, выслал ЛСку)
Так вообще библиотека замечательная, тем более со встроенным кэшированием.
Да, то что файловый я видел. Изучил немного класс. Однозначно буду использовать.
Да я никогда не использовал везде кэш. Кэширую в основном только тяжелые запросы которые циклируются.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.