TOP書籍連動> PHPとOracleの提携
SQLインジェクション
OracleとPHPでウェブサイトを構築する

第3回:PHP&Oracleの利点と欠点

著者:Robert Mark   2006/2/22
1   2  3  次のページ
複数のデータベース名の管理

   複数のデータベースの名前はPHPではなく、Oracleの"tnsnames.ora"ファイルで管理するべきです。OCI8のログイン関数"ocilogin()"はユーザ名とパスワードが必要です。第3引数にはデータベースのホストを指定します。

   筆者が関わったエンタープライズの大きな開発の環境では、開発サーバ、テストサーバ、本番サーバの3つのサーバを使用していました。それぞれのサーバは異なるデータベースに接続します。テストサーバと開発サーバではテスト用のデータベースに接続しており、本番サーバは本番用のデータベースサーバに接続していました。

   PHPのコードをサーバ間で移動すると、データベースに接続するコードがあると、実行するサーバによっては間違ったデータベースに接続することになり問題が発生します。例えば、コードをテストする時は、アプリケーションを開発サーバからテストサーバに移動して、バグを探します。

   テスト環境は開発環境と同じデータベースを使用しているので問題は起こりません。しかし、テストが終了して本番サーバにコードを移します。本番サーバに移動する前にコードを変更したくないので、サーバごとに異なる設定となる部分をなくすようにしました。その結果、PHPコードがすべて同じで、"tnsnames.ora"ファイルだけがサーバごとに異なるようになりました。

OCI vs. PDO

// データベースの呼び出し関数は以下のようになります。

//OCILogon() - データベースへのログイン, OCIParse() - SQL のパース
//OCIExecute() - ステートメントの実行, OCIFetch() - 結果セットの解放

// データベース接続の設定
$strUser = "scott"
$strPwd = "tiger"
$strDB="(DESCRIPTION=
   (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=TCP)
         (HOST=my.hostname.domain.com)(PORT=1521)
      )
   )
      (CONNECT_DATA=(SERVICE_NAME=theservice))
   )"
// データベースへのログイン
$objDBConn = OCILogon($strUser, $strPwd, $strDB);
//DB オブジェクトのチェック
if($objDBConn){
   //SQL の作成
   $strSQL = "SELECT FIRST_NAME, LAST_NAME FROM PEOPLE.TBL_NAMES"
   //SQL のパース
   $objQuery = OCIParse($objDBConn, $strSQL);
   //SQL ステートメントの実行
   $objResult = OCIExecute($objQuery);
   //SQL ステートメントのチェック
   if($objResult){
      // 結果セットに対するループ
      while(OCIFetch($objQuery)){
         echo OCIResult($objQuery, "FIRST_NAME”);
         echo " ";
         echo OCIResult($objQuery, "LAST_NAME”);
         echo "<br>"
      }//end while
   }else{
      // クエリエラーの発生
      $arrError = OCIError($objQuery);
   }//end objResult if

   }else{
      // データベースへのログイン失敗
      $arrError = OCIError();
}//end objDBConn if

if(isset($arrError)){
   echo "ERROR: ".$arrError['message'];
}

// PDO API を利用して上記と同じことを実行するためには以下のようにします。

// データベース接続の設定
$strUser = "scott"
$strPwd = "tiger"
$strDB = "OCI:dbname=theservice;host=my.hostname.domain.com"
try{
   $objDB = new PDO($strDB, $strUser, $strPwd);
}
catch (PDOException $objException){
   echo "ERROR: " . $objException->getMessage();
}
//SQL の作成
$strSQL = "SELECT FIRST_NAME, LAST_NAME FROM PEOPLE.TBL_NAMES"
foreach($objDB->query($strSQL) as $arrRow){
   echo $arrRow['FIRST_NAME'];
   echo " ";
   echo $arrRow['LAST_NAME'];
   echo "<br>"
}
1   2  3  次のページ

PHPプログラマーズマガジン 書籍紹介
PHPプログラマーズマガジン

PHPプログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。

発行:アシアル株式会社  価格:1,029円

 ご購入はこちら
http://www.asial.co.jp/magazine/
Ilia Alshanetsky
著者プロフィール
Robert Mark
ケベックのモントリオールにあるMcGill大学に勤めており、シニアWebプログラマ/データベースプログラマ。主にOracleとPHPを使って、Webサイトを構築している。


INDEX
第3回:PHP&Oracleの利点と欠点
  複数のデータベース名の管理
  OracleとPHPを別のサーバに配置する
  画像とデータベースとの結びつき