トップ «前の日記(2007-09-16) 最新 次の日記(2007-09-20)» 編集

Ussy Diary


2007-09-17

[PHP][Ubuntu]Ubuntu で PDO MySQL ドライバをインストールする

まだやり始めてさっぱり理解もしていないのですが、データベースにアクセス できないと(テキストなど永続化できるもの)アプリケーションのありがたみがありません。 まずはデータベースにアクセスしてみたいと思います。

そこで調べてみたところ PDO という抽象化されたデータベースアクセスライブラリが PHP5 から提供されているようです。

PEAR で提供されているものに比べ、ネイティブな C 言語で書かれている ため高速のようで、 Zend_Db にも採用されているみたいです。

Ubuntu でいきなり PDO をインストールしようとしても phpize という実行ファイルを 求められ失敗してしまうため、それが含まれている php5-dev を インストールする必要があります。

apt-get install php5-dev
pecl install pdo

続いて PDO の MySQL ドライバをインストールします。 抽象化されているものを具体化するためのものです。

今度は MySQL のヘッダーがないとコンパイルで失敗するため、 それが 含まれている libmysqlclient15-dev をインストールします。

apt-get install libmysqlclient15-dev
pecl install pdo_mysql

最後にはまったのが php.ini の extension_dir を指定していなかったため、 適当な場所を指定。自分は /usr/share/php/ext ディレクトリを作成し、そこを 指定しました。後ビルドした後に記述してくださいというメッセージのものを php.ini に追加。

extension=pdo.so
extension=pdo_mysql.so

extension_dir として指定した場所に、先ほどビルドした pdo.so と pdo_mysql.so をコピーします。

cp /usr/lib/php5/20060613+lfs/* /usr/share/php/ext/

これで大丈夫とテストコードの php を叩いても

'The PDO extension is required for this adapter but not loaded'

他に間違っていないことを確認しても問題なさそうと時間を食っていたところ ふと apache の php.ini しか直していないことにここで気づきました\(^o^)/

/etc/php5/cli/php.ini を修正し、実行したところ例外を吐かれずうまくいきました。これでデータベースまで接続するところまでは環境ができあがりました。

Zend_Db を使ってみたテストコード。例外処理も書いていなければ何もできません(笑)。

<?php
require_once 'Zend/Db.php';

$params = array(
                'host' => '127.0.0.1',
                'username' => 'test',
                'password' => 'test',
                'dbname' => 'mysql');
$db = Zend_Db::factory('Pdo_Mysql', $params);
$db->getConnection();
$stmt = $db->prepare('select * from user');
$stmt->execute();
$db->closeConnection();

?>