DB取得メソッド DB_common::getAll, DB_common::getAssoc, DB_common::getOne
トランザクション制御 DB_common::autoCommit, DB_common::rollback, DB_common::commit
SQLインジェクション防止 DB_common::quoteSmart
insert, updateマッピング DB_common::autoExecute
DB取得値拡張クラス DB::DB_row
改良型PEAR::DB PEAR::MDB
PEAR::MDB2 真・データベース制御クラス
PEAR::DB_DataObject
PECL::PDO
ネイティブ関数より遅いから使わない!!
そう言った人がいました。
その人に問いたい。
ネイティブ関数をプログラム上に書きまくりますか?
(ノ・・)ン。。。。。。(((●コロコロッ
PEAR概要にもあるようにたくさんあるデータベースを設定するだけで変更できます。
基本設定の構文はこうです(マニュアル引用)。
phptype(dbsyntax)://username:password@protocol.hostspec/database phptype: PHPで使用されるデータベースバックエンド。 (すなわちmysqlやodbc等) dbsyntax: SQL構文等のデータベース関連構文。 protocol: 使用する通信プロトコル。 (すなわち、tcpやunix等) hostspec: ホスト指定。 (hostname[:port]) database: DBMSサーバ上のデータベース使用方法。 username: ログイン用ユーザ名。 password: ログイン用のパスワード。 proto_opts: protocolで使用されるオプション。
例えばMySQLを使ってユーザー名を[PEAR]、パスワードを[phptips]でホスト名を[itboost.co.jp]データベース名を[itbtech]とすると、
$dsn = mysql://PEAR:phptips@itboost.co.jp/itbtech
となります。
データベースがMySQLからPostgreSQLになった場合はphptypeの[mysql]を[pgsql]にします。
データベースの制限をユーザー、パスワードでもうけている場合は、ユーザー名・パスワードを別のものにします。
バーチャルホストなどでサーバを複製し、データベースを別のものにしたい場合は、データベース複製後、データベース名を[itbtech]から別の名前変えます。
データベースに接続する場合、「通常」と「永続的」接続があるとおもいます。関数では[XXX_connect][XXX_pconnect]と使い分けるのですが、PEARのDBでは、接続メソッド connect の第二引数で、接続の形態を選択することが可能です。
クエリーを送信するとDB::DB_resultオブジェクトが帰ってきます。その際のエラー処理は接続の時と同じです。
取得したデータはfetchRowで取得します。メソッドを一回実行すれば一レコードが取得されます。レコード数を取得したい場合は、numRowsを使います。
切断はdisconnectを使います。
永続接続をしている場合はdisconnectでは切断できないのは[XXX_close]関数と同じです。
<? // firebirdを使ったときのサンプル require_once("DB.php"); $phptype = "ibase(firebird)"; $username = "SYSDBA"; $password = "masterkey"; $hostspec = "localhost"; $port = "3050"; $dbfile = "/opt/firebird/examples/employee.fdb"; $dsn = "$phptype://$username:$password@$hostspec:$port/$dbfile"; $dbObj = & DB :: connect( $dsn, true ); // 永続接続 if( DB :: isError( $dbObj ) ){ // エラー処理 echo $dbObj->userinfo; exit(); } $stmt = "SELECT PO_NUMBER, ORDER_STATUS, ITEM_TYPE FROM SALES"; $result = & $dbObj->getAll( $stmt ); if( DB :: isError( $result ) ){ echo $result->userinfo; exit(); } echo " Query success "; foreach( $result as $key => $value ){ echo "$key : "; echo nl2br( print_r( $value, true )); } ?>
バグ?
firebird1.5で使用するとセグメントエラー(Segment Error)が発生して止まる。