Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Использование PDO

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ex.engine
Отправлено: 25 Февраля, 2015 - 20:57:12
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Здравствуйте. Читая ответы на форумах касательно PDO, многие пишут что PDO, что MySQLi использовать "напрямую" нельзя, мол писать/использовать готовую "обёртку", однако не в каких мануалах про PDO или же MySQLi ни сказано ничего про это.
Единственный плюс для меня использовать "обёртку" - это удобная обработка ошибок.

Где же истина? Подскажите пожалуйста.
Если же действительно лучше использовать обертку, то - какую лучше?

И еще, является ли нормальной практикой использовать PDO никак не обрабатывая исключения которые он бросает? Т.е. вообще не использовать блоки try/catch в коде при работе с PDO.

Ибо прочитав хорошую статью, автор явно подметил что "примеры обработки исключений, точнее не обработка, а тупо вывод ошибки на экран, не является нормально и если не знаешь как правильно это сделать, лучше не использовать вообще try/catch, ибо просто вывести ошибку на экран PHP и так сам сможет".

Поэтому возник такой вот вопрос.
 
 Top
Ts.Saltan
Отправлено: 25 Февраля, 2015 - 22:32:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




ex.engine пишет:
Читая ответы на форумах касательно PDO, многие пишут что PDO, что MySQLi использовать "напрямую" нельзя, мол писать/использовать готовую "обёртку", однако не в каких мануалах про PDO или же MySQLi ни сказано ничего про это.

Нагло врут, порою обёртки только нагромождают код и тормозят его выполнение. Одно из основных преимуществ mysqli и pdo - подготовленные выражения, можно для экономии места, чтоб не плодить строки типа

$mysql->prepare...
$mysql->bind...
$mysql->execute..

засунуть это всё в одну функцию.

ex.engine пишет:

И еще, является ли нормальной практикой использовать PDO никак не обрабатывая исключения которые он бросает? Т.е. вообще не использовать блоки try/catch в коде при работе с PDO.


Вообще, неcпойманное исключения == неработоспособность сайта, поэтому я практикую такую вещь, вся основная логика приложения оборачивается try-catch, и в случае исключения выводится какой-нибудь текст, мол, что-то сломалось.

Хотя, никто не запрещает в той же обёртке ловить исключения.
 
 Top
Anguis
Отправлено: 25 Февраля, 2015 - 22:50:33
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012  


Помог: 2 раз(а)




ex.engine, у PDO есть настройки. Сброс исключений можно включить или отключить. Если уж не нравятся исключения. На мой взгляд исключения - вещь мега полезная, кругом их использую.
Что касается оберток. Ну я допустим использую в своих приложениях и обертки и напрямую PDO. Т.е. если простой запрос - то зачем лишние нагромаждения? Зразу засунул его в ->query и все, а когда нужно что-то сложное, тогда да. Обертка, которая сама собирает запрос из подготовленных приложений, используя безопасный prepare и execute
 
 Top
ex.engine
Отправлено: 25 Февраля, 2015 - 23:15:54
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Ts.Saltan, то есть, по сути обёртка это просто некое удобство правильно я понимаю?

Anguis, да я так и делаю при инициализации подключения. Режим в котором PDO бросает исключения вроде как ERRMODE_EXCEPTION да? Вещь то да, полезная, если знать как правильно воспользоваться. Пока что у меня с этим не очень.

Скажите, а есть ли вообще смысл использовать PDO если на проекте никогда не будет меняться СУБД? Сам использую его из-за хорошего функционала и безопасности. До этого использовал MySQLi, сначала процедурный, потом ОО.

(Отредактировано автором: 25 Февраля, 2015 - 23:18:54)

 
 Top
DelphinPRO
Отправлено: 26 Февраля, 2015 - 01:36:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




ex.engine пишет:
Скажите, а есть ли вообще смысл использовать PDO если на проекте никогда не будет меняться СУБД?

В проектах почти никогда не меняется СУБД Улыбка
Смысл использования PDO вовсе не в смене типа базы данных.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
GoDr
Отправлено: 26 Февраля, 2015 - 07:05:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




Я всегда использую обёртку. Куда проще:
PHP:
скопировать код в буфер обмена
  1. $rows1 = $db->select($sql, array($a, $b, $c));
  2. $rows2 = $db->select($sql, $a, $b, $c);

Т.е. сразу переменной даёшь значение отправив только сам запрос и данные. При этом я не задумываюсь как это работает.
Вот есть у меня CMS. Когда-то она работала на MySQL. Потом я переделал обёртку на MySQLi. Сейчас переписываю на PDO. При этом меняется только обёртка, а не все запросы по всему проекту.

Второй плюс - это когда обёртка адаптирована под конкретный проект. А так как любой проект имеет определённый набор очень частых запросов, то просто в обёртке создать дополнительный метод, например:
PHP:
скопировать код в буфер обмена
  1. $cat_count = $db->countCat($id_cat);


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

(Отредактировано автором: 26 Февраля, 2015 - 07:07:00)



-----
Система управления веб-содержимым Lotos CMS
 
 Top
Ch_chov
Отправлено: 26 Февраля, 2015 - 08:18:32
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




PDO само по себе обёртка. Для большинства мелких и средних проектов его вполне достаточно. В некоторых случаях имеет смысл сделать свою обертку (дочерний класс), для PDO, что бы добавить какой то дополнительный функционал, например: пагинацию, отладку запросов и т.д.

GoDr пишет:
$cat_count = $db->countCat($id_cat);

Архитектурная ошибка. Драйвер базы данных не должен знать ничего про категории и другие сущности системы. Имхо.
 
 Top
GoDr
Отправлено: 26 Февраля, 2015 - 12:28:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




Ch_chov, это как пример расширения основной "обёртки" для конкретного проекта всего-лишь Улыбка Запрос утрирован конечно, но можно добавить в запрос таблицу, поле, и что хотим (MAX, MIN, COUNT)

(Отредактировано автором: 26 Февраля, 2015 - 12:31:26)



-----
Система управления веб-содержимым Lotos CMS
 
 Top
ex.engine
Отправлено: 26 Февраля, 2015 - 15:00:26
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Спасибо большое за ответы и пояснения. Скажите а есть ли готовые хорошие обертки для PDO или же MySQLi? (SafeMySQL что-то не впечатлила), подскажите пожалуйста.

Поработав всю ночь с PDO я понял что обертка нужна хотя бы как минимум для нормальной обработки ошибок. А то как-то не хорошо при ошибки SQL запроса или т.п. получать постоянно Fatal error'ы, если использовать напрямую.

GoDr пишет:
В проектах почти никогда не меняется СУБД
Смысл использования PDO вовсе не в смене типа базы данных.

Мнений много просто, кто-то говорит так, кто-то сяк. И поэтому при изучении возникает проблема в том, кого слушать то.

Официальные мануалы я конечно читал, но там настолько банальные примеры, что даже не знаю как они могут помочь. Нормального пояснения там нет. ИМХО.

Уже настолько запутался как же правильно работать с данными драйверами, что нет нет приходят страшные мысли о том чтобы использовать процедурный стиль MySQLi Однако , там-то всё понятно, и даже не надо никаких мануалов. Подмигивание
 
 Top
GoDr
Отправлено: 26 Февраля, 2015 - 18:33:13
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




ex.engine пишет:
или же MySQLi?
возьми мою Улыбка Все методы документированы на 100% с примерами использования..
https://code[dot]google[dot]com/p/gddatabase/
Обёртка работает с подготовленными выражениями.

На днях (хотя праздники скоро...) переведу класс на PDO, Вызов методов не должно затронуть

(Отредактировано автором: 26 Февраля, 2015 - 18:33:39)



-----
Система управления веб-содержимым Lotos CMS
 
 Top
ex.engine
Отправлено: 26 Февраля, 2015 - 18:57:00
Post Id


Новичок


Покинул форум
Сообщений всего: 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 используется, то есть можно теперь не использовать его как я понимаю. Количество кода сократится, радует. Улыбка

(Отредактировано автором: 26 Февраля, 2015 - 19:39:13)

 
 Top
GoDr
Отправлено: 26 Февраля, 2015 - 20:04:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




ex.engine, наверное пиши или в личку или в отдельную тему Улыбка Как говорится один вопрос - одна тема ...

Ошибки всегда будут пока не настроишь конфигурацию. Настроишь конфигурацию и всё будет понятно. Это с любой базой (обёрткой). Кеш можешь использовать, можешь не использовать. Всё зависит от запросов, не всегда же кеш выгодно. Кеш файловый. Настройки, константы и т.п. вынесены с целью лучшей интеграции в свои проекты


-----
Система управления веб-содержимым Lotos CMS
 
 Top
ex.engine
Отправлено: 26 Февраля, 2015 - 20:44:06
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




GoDr, выслал ЛСку) Улыбка

Так вообще библиотека замечательная, тем более со встроенным кэшированием.
Да, то что файловый я видел. Изучил немного класс. Однозначно буду использовать.

Да я никогда не использовал везде кэш. Кэширую в основном только тяжелые запросы которые циклируются.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB