PEAR::DB データベース制御

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

概要

PHP::PEAR

ネイティブ関数より遅いから使わない!!
そう言った人がいました。
その人に問いたい。
ネイティブ関数をプログラム上に書きまくりますか?

(ノ・・)ン。。。。。。(((●コロコロッ

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)が発生して止まる。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Third Project
証券会社ランキング比較