PECL::PDO(PHP Data Objects)がアツイ!!
PECL::PDOのインストール
PECL::PDOのドライバーインストール
PDOはそれ単体ではなにも動作しない。
あくまでCommonクラスと行った具合のもの。
利用するには各種データベースに対応したドライバーを別途インストールする必要がある。
以下はドライバーの種類(2006/04/30現在)
PDO_DBLIB FreeTDS/Sybase/MSSQL driver for PDO PDO_FIREBIRD Firebird/InterBase 6 driver for PDO PDO_INFORMIX PDO driver for IBM Informix databases PDO_MYSQL MySQL driver for PDO PDO_OCI Oracle Call Interface driver for PDO PDO_ODBC ODBC v3 Interface driver for PDO PDO_PGSQL PostgreSQL driver for PDO PDO_SQLITE SQLite v3 Interface driver for PDO
MySQLを例にインストールをする。
他のドライバーも使用方法は同じなので読み替えてみて欲しい。
PECLモジュールは基本的にインストール方法は同じ。
# pecl install pdo_mysql
あとはphp.iniに
extension=pdo_mysql.so
または、プログラムに
dl( pdo_mysql.so );
と記述する
ただし、MySQLなどの各種パスが通っている場合のみ。
自身でコンパイルする場合もPDOと同じ。
MySQLなどのインストールパスが通っていない場合は、
インストールパスなどをconfigureオプションに追加する事も出来る。
sharedオプションはつけてもつけなくてもDSOでインストールされる
$ pecl download pdo_mysql $ tar xvfz PDO_MYSQL.x.x.x.tgz $ cd PDO_MYSQL.x.x.x $ phpize $ ./configure [--with-pdo-mysql=/usr/local/mysql] $ make # make install
これもPDOと同様。
$ wget php-5.x.x.tar.gz $ tar xvfz php-5.x.x.tar.gz $ rm -Rf php-5.x.x/ext/pdo $ pecl download pdo_mysql $ tar xvfz PDO_MYSQL.x.x.x.tgz $ mv PDO.x.x.x php-5.x.x/ext/pdo_mysql $ cd php-5.x.x $ ./buildconf $ ./configure --with-pdo-mysql[=/usr/local/mysql] 〜〜〜 $ make # make install
configureオプションにpdo-mysqlと言うのがあるので、
sharedつきで有効にしておく
リビルドしたくない場合は
PHP5のインストールと同じように、
pecl installでインストールする
configureオプションにpdo-mysqlと言うのがあるので、
それを有効にしておく。
$ wget php-5.x.x.tar.gz $ tar xvfz php-5.x.x.tar.gz $ cd php-5.x.x $ ./configure --with-pdo-mysql[=/usr/local/mysql] 〜〜〜 $ make # make install
configureオプションのpdo-mysqlにsharedオプションをつける
$ wget php-5.x.x.tar.gz $ tar xvfz php-5.x.x.tar.gz $ cd php-5.x.x $ ./configure --with-pdo-mysql=shared[,/usr/local/mysql] 〜〜〜 $ make # make install
実はpecl installではすんなり入ってくれない場合が多い。
理由はmysqlのパスが通っていないからだ。
その場合はコンパイルでインストールする
$ ./configure --with-pdo-mysql=/usr/local/mysql ・・・ checking for MySQL support for PDO... yes, shared checking for mysql_config... /usr/bin/mysql_config checking for mysql_query in -lmysqlclient... yes checking for mysql_commit... yes checking for mysql_stmt_prepare... yes checking for mysql_next_result... yes checking for mysql_sqlstate... yes checking for PDO includes... checking for PDO includes... /usr/lib/php5/include/php/ext configure: error: You've configured extension pdo_mysql, which depends on extension pdo, but you've either not enabled pdo, or have disabled it.
どうもbuildオプションのバグなのか、
どのモジュールでもPDO includesのチェックで止まる
下記のファイルをhackしてもう一度やってみると良い
/usr/local/lib/php/build/acinclude.m4 1024行目 -- ここから -- if test "x$is_it_shared" = "x" && test "x$3" != "xtrue"; then AC_MSG_ERROR([ You've configured extension $1, which depends on extension $2, but you've either not enabled $2, or have disabled it. ]) fi -- ここまで -- を削除
追記:
PDO1.0.3で改善された模様
無事にインストールが完了して、
試しにクエリを送信してみると問答無用で下記のメッセージが出るときがある
Segmentation fault
原因はわからないのだが、
どうも関連している関数をDSOインストールしていると発生するっぽい。
例えばPDO_MYSQLを使用して発生した場合、
mysql関数をDSOでインストールしていると言った具合
PDO_MYSQL => mysql PDO_PGSQL => pgsql PDO_OCI => oci8
と言った具合。
とりあえず、全部静的インストールをしてみるとよい。
追記:
PDO1.0.3で改善された模様
PECL::PDO(PHP Data Objects)がアツイ!!
PECL::PDOのインストール
PECL::PDOのドライバーインストール