2012-06-15 19 views
5

OOPの観点から、PHPでDAO(データアクセスオブジェクト)を作成する適切な方法は何ですか?PHPでDAOを作成する適切な方法

  • GetAllAccounts
  • GetAccountByID
  • UpdateAccount
  • DeleteAccount
  • InsertAccount
  • 例えば

    (基本的な例として、アカウントを使用して)、私のAccountDAOは、以下の機能のいくつかを持っています

データベースのすべてのアカウントを取得したら、アカウントオブジェクトの配列として呼び出し元に返す必要がありますか?私はちょうどmysqlの結果セットを返す必要がありますか?

DAOの良い例はありますか?データベースへの接続を作成して3つの方法の一つを含むクラスを作ることができます。このため

答えて

-1

は、もう一つはあるSQLクエリ

<?php 
class Database{ 

    public function con_open(){ 
     $con = mysql_connect("domain","username","password"); 
      if (!$con) 
      { 
       die('Could not connect: ' . mysql_error()); 
      } 
     mysql_select_db("db_name", $con); 
    } 

    public function query($sql){ 
     $result = mysql_query($sql); 
      if(!$result){ 

      }else{  
        return $result; 
       } 
    } 

    public function fetch($result){ 
     $row = mysql_fetch_array($result); 
     return $row; 
    } 

    public function con_close(){ 
     mysql_close($con); 
    } 
} 


$db = new Database(); 

?> 

希望参考になりましこの意志を実行し、接続し、三番目に近いこと

+2

あなたは 'mysql_ *'拡張を使用しないでください。あなたの例ではコードを明示的に変更せずに接続の詳細を変更することはできません。 – cspray

+2

私はOPがデータベースクラスではなくDAO(データベース内の特定のテーブルにアクセスするために使用される)を探していると思います。 – AdmiralAdama

0

あなたは正しい方法でDAOを構築しています。あなたがリストした方法は間違いなくDAOの一部であるべきです。

特定の質問に答えるために、DAOはデータベース固有のオブジェクトをリークしてはいけません。データベースベンダー固有のものではない限り、いくつかのデータベース概念がリークする可能性があります。

だから、あなたはMySQLの結果セットを返さないでください。しかし、MySQLの結果セットをラップする包括的な結果セットを作成し、より高いレベルのコンセプト(カラムを抽出するのではなくオブジェクト全体を抽出する)で動作する可能性があります。

編集:実際に結果セットラッパーを作成するのではなく、最初に提案したようにオブジェクトの配列を返すこともできます。これはほんの一例でした。

+0

すごくおかげさまで、私はASP世界でこの種の作業を行ってきましたが、これまでのすべてのPHPスクリプトは基本的な手続き型スクリプトでした。私は私のPHPアプリケーションをoop PHPアプリケーションに変えようとしています。 – carlg

関連する問題