Как стать автором
Обновить

Подключение MySQL в ZendFramework

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

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

Инструментарий:
— Windows XP Professional (SP2)
— ZendFramework-1.6
— PHP Version 5.2.6
— Сервер: StpServer 1.0
— MySQL 5.0.51b


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

Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'The mysql driver is not currently installed' in T:\home\virtual\zend\library\Zend\Db\Adapter\Pdo\Abstract.php:103 Stack trace: #0 T:\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 in the distribution; it will be automatically enabled when you run configure.


Остается найти драйвер для 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, чего и требовалось достичь.

Не думаю, что это было столь уж сложно, но и не на столько просто, что бы вот так сесть и сразу догадаться. Короче, кто знал — не пинать, кто нет — теперь знаете!
Теги:
Хабы:
Всего голосов 8: ↑5 и ↓3+2
Комментарии6

Публикации

Истории

Ближайшие события