3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(PHP)MySQLの関数を使おうとすると「Unable to load dynamic library」と怒られる


Windowsの開発環境上で、cakePHPでデータベースに保存するコントローラで下記のようなエラーが出ました。

 [error] [client 127.0.0.1] PHP Fatal error:  Call to undefined function mysql_connect() in C:(省略)\\cake\\libs\\model\\datasources\\dbo\\dbo_mysql.php on line 6


あれ? mysql_connect()が使えないのか?と思って、mysql_connect()だけ書いたPHPを置いて、PHP.iniでエラー表示を有効にして(display_errors = On)実行。

やはり Call to undefined function mysql_connect() となります。
Apacheの error.log を見てみるとPHPの起動時に下記のようになっていました。

PHP Warning:  PHP Startup: Unable to load dynamic library 'D:\\Program Files\\PHP\\ext\\php_mysql.dll' - \x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83\x82\x83W\x83\x85\x81[\x83\x8b\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B\r\n in Unknown on line 0


どうやら、php_mysql.dllがAapacheに読み込まれてないようです。

で、php.iniの extension_dir や extension=php_mysql.dll の設定も見直してみましたが問題なし。
(というより、インストーラでインストールしてるから問題あったら困るんですけどね。)

で、いろいろ探しているうちに、みつけたのがこちら
どうやら、MySQLのクライアントライブラリである libmysql.dll がWindowsのパスの通る場所においてないといけないみたいです。
自分の場合、libmysql.dll は既に、PHPのインストールフォルダ直下に用意されてました。
Sytem32にDLLおくのはいやなので、PHPのインストールフォルダに環境変数のPATHを通すことに。

注意点は環境変数PHPのパスを通した後はOSを再起動すること。
自分の場合も再起動しないと反映されていませんでした。