• Авторизация


Поддержка MySQL в ZendFramework 21-08-2008 19:08 к комментариям - к полной версии - понравилось!


Проблема доступа к MySQL из ZendFramework может поставить новичка втупик, так как сообщения об ошибках и отсутствия каких-то тамдрайверов, далеко не так понятны, если ты еще не успел толком вникнутьв используемые Zend'ом технологии и принципы.

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

Итка, поехали...

Инструментарий:
- ZendFramework-1.5.3 (последняя на момент написания поста stable версия)
- PHP Version 5.2.6
- Сервер: StpServer 1.0
- MySQL 5.0.51b


Посленаписания некторого кода или копипаста кода туториала с использованиемБД, при попытке зайти на страницу где некие данные из базы выводятся вбраузер, я получаю ошибку вида:

Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' withmessage 'The mysql driver is not currently installed' inT:\home\virtual\zend\library\Zend\Db\Adapter\Pdo\Abstract.php:103 Stacktrace: #0T:\home\virtual\zend\library\Zend\Db\Adapter\Abstract.php(389):Zend_Db_Adapter_Pdo_Abstract->_connect() #1 .......


Первое что приходит в голову посмотреть страницу phpinfo() в поисках возможных причин проблемы, что мы и делаем...

Тамв разделе PDO, обнаруживается, что единственный из установленныхдрайверов PDO, это sqlite2. В нашем же случае, мы хотим использоватьMySQL.

Note: PDO (PHP Data Objects) - расширение для языка PHP, позволяющееразработчику иметь простой и удобный интерфейс для доступа к базамданных из PHP скриптов.

PDO предоставляет абстрактный доступ кбазам данных, это означает, что не важно какую СУБД вы используете, влюбом случае вы используете стандартные методы PDO для получения данныхи для их записи в базу.

PDO входит в PHP версии 5.1, и доступнокак расширение из PECL для PHP 5.0; PDO использует новые OO функцииядра PHP 5 и не работает с PHP более ранних версий.

Материал из Википедии свободной энциклопедии

Отлично, теперь нам известно о том, что такое PDO и чего собственно нехватает. Но возникает закономерное возмущение в адрес сборки сервера.

Однако как сообщает официальный сайт PHP, проблема не в дистрибутиве STP:

If you're running a PHP 5.1 release, PDO and PDO_SQLITE is included inthe distribution; it will be automatically enabled when you runconfigure.


Остается найти драйвер для mysql.

Как сообщает тот же официальный сайт, файлики должны называться так:
 

extension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_informix.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll


Поскольку ранее мы узнали, что PDB и его драйвера написаны на С врамках PECL, нам остается зайти на официальный сайт этого сообщества.Далеко ходить на придется, добавим к адресу сайта PHP всего лишьприставку pecl.

На http://pecl.php.net/ забиваем ключевое слово PDO в поиск раздела Packages.

Врезультатах поиска выбираем самый релевантный пункт и оказываемся нанужной нам странице. Теперь кликаем в таблице версий на номерокпоследнего стабильного релиза и на открывшейся странице отыскиваемссылку PDO_MYSQL. Очевидно мы на верном пути.

Однако, не стоитспешить и жать на линк [ Download Latest ], он конечно даст нам скачатьпоследний релиз библиотеки, но ... в исходниках. Да-да, вот так хитроустроены страницы PECL.

Что бы добраться до бинарников подWindows нам придется еще раз кликнуть по по первому пункту в таблицеверсий Available Releases, на этот раз 1.0.2

Вот тут-то в описании пакета Package Information, мы и находим заветную ссылку:
Windows binaries can be found at http://pecl4win.php.net/ext.php/php_pdo_mysql.dll

Она то нам и нужна!

Послезагрузки маленького файлика дело, как говориться, в шляпе. Остаетсяскопировать его в папку PECL нашего PHP. В моем случае этоT:\usr\local\Php\PECL\

Последний штрих - прописать дополнение вphp.ini в разделе расширений. что бы найти нужное место советуюиспользовать поиск со словом pdo.

В итоге получится такая строка, среди прочих расширений:

;extension=php_msql.dll
extension=php_mysql.dll
extension=php_mysqli.dll
;extension=php_oci8.dll
;extension=php_openssl.dll
;extension=php_oracle.dll
;extension=php_pdf.dll
extension=php_pdo.dll
extension=php_pdo_mysql.dll
;extension=php_pgsql.dll
;extension=php_printer.dll


ЧТО ВАЖНО, прописывать ее следует после extension=php_pdo.dll,так как PHP загружает эти модули последовательно и если порядок двухстрок связанных с PDO перепутать, то вы увидите такое сообщение:

---------------------------
Warning
---------------------------
PHP Startup: Unable to load dynamic library '/usr/local/PHP/PECL\php_pdo_mysql.dll' - Не найден указанный модуль.

---------------------------
ОК
---------------------------


Вот и все премудрости.

После успешной перезагрузки сервера, получаем работающий MySQL в ZendFramework, чего и требовалось достичь.

Недумаю, что это было столь уж сложно, но и не на столько просто, что бывот так сеть и сразу догадаться. Короче кто знал - не пинать, кто нет -теперь знаете!

Сообщение добавлено через MovableType API

вверх^ к полной версии понравилось! в evernote
Комментарии (10):
03-09-2008-13:49 удалить
firebird Ценная инфа. Спасибо. Может известно как поддерживать firebird в ZendFramework ? Спасибо.
Smile_ArT 03-09-2008-13:58 удалить
Аноним, да не за что... Рад что пригодилась... А вот с firebird в ZendFramework, увы, не доводилось сталкиваться...
25-12-2009-18:51 удалить
к сожалению ваша ссылка недоступна http://pecl4win.php.net/ext.php/php_pdo_mysql.dll. Может есть другие источники откуда можно скачать библиотеку php_pdo_mysql.dll
Smile_ArT 25-12-2009-18:55 удалить
Ну вот моя текущая версия http://dl.dropbox.com/u/212000/php_pdo_mysql.dll но не факт что подойдет. Вообще она взята из Денвер PHP5 Extensions последней версии.
25-12-2009-19:14 удалить
а почему имеет расширение ехе когда скачал? Что нужно этот файл переименовать с расширением dll? А вообще где можно скачать эту библиотеку или может поменять денвер где есть эти примочки?
25-12-2009-19:18 удалить
кстати версия РНР у меня установлена PHP Version 5.1.6. Эта ваша библиотека что вы дали она подойдет к даному модулю? Или другую нужно под эту версию! Помогите, плиз, установить PDO позарез нужно....
25-12-2009-19:32 удалить
Установил и мне постоянно выдает сообщение. PHP Startup: Unable to load dynamic library '/usr/local/PHP/PECL\php_pdo_mysql.dll' - Не найден указанный модуль. Прописал я так как вы написали: extension=php_pdo.dll extension=php_pdo_mysql.dll В чем проблема, не пойму?
Smile_ArT 25-12-2009-20:19 удалить
Ответ на комментарий # Если туда кинули, то проблема скорее всего именно в версии dll файла. Если у вас стоит Денвер, то расширения для него можно получить тут: http://www.denwer.ru/packages/php5.html


Комментарии (10): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Поддержка MySQL в ZendFramework | Smile_ArT - Дневник Smile_@rT | Лента друзей Smile_ArT / Полная версия Добавить в друзья Страницы: раньше»