SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

DAO generator for PHP and MySQLを使用する

DAOデザインパターンを使ってデータベース操作を実現するPHPクラスの作成方法

DAOクラスの概要

 以下、重要なDAOクラスについて簡単に説明していきます。

  • ConnectionFactoryクラス:これはデータベースと密接に連動するクラスです。この「ファクトリ」クラスにはデータベースへの接続をオープンするという役割があります。データベースへの接続はgetConnectionメソッドで行われ、このメソッドはデータベース名とユーザー名/パスワード資格情報を表す3つの引数を取ります。これらの引数はConnectionPropertyクラスのPOJOスタイルでマップされます。
  • static public function getConnection() {
       $conn = mysql_connect(ConnectionProperty::getHost(), 
          ConnectionProperty::getUser(), 
          ConnectionProperty::getPassword());
       mysql_select_db(ConnectionProperty::getDatabase());
       if(!$conn){
          throw new Exception('could not connect to database');
       }
       return $conn;
    }
    
  • Connectionクラス:このクラスはデータベースへの単一の接続を表します。実際の接続はConnectionコンストラクタでConnectionFactoryクラスから取得します。
  • public function Connection() {
       $this->connection = ConnectionFactory::getConnection();
    }
    

     このクラスには接続のクローズとSQLクエリの実行という役割もあります。

  • Transactionクラス:このクラスはデータベースへのトランザクション操作を可能にする一群の関数をカプセル化しています。このクラスはヘルパークラスArrayListを通じてトランザクションの配列を提供します。ArrayListはPHP配列に対してコレクションをシミュレートするクラスです。これらのトランザクションはConnectionが提供する接続を使用します。TransactionクラスはgetCurrentTransaction関数によって現在のトランザクションへのアクセスも提供します。
  • QueryExecutorクラス:QueryExecutorクラスはSQLステートメントを実行するための関数を提供します(正確にはCRUD構文を実装する関数を提供します)。execute関数はSQLのSELECTステートメントを実行し、executeUpdate関数はSQLのUPDATEDELETEINSERTステートメントを実行します。
  • public static function execute($sqlQuery){
       $transaction = Transaction::getCurrentTransaction();
       if(!$transaction){
          $connection = new Connection();
       }else{
          $connection = $transaction->getConnection();
       }      
       $query = $sqlQuery->getQuery();
       $result = $connection->executeQuery($query);
       if(!$result){
          throw new Exception(mysql_error());
       }
       $i=0;
       $tab = array();
       while ($row = mysql_fetch_array($result)){
          $tab[$i++] = $row;
       }
       mysql_free_result($result);
       if(!$transaction){
          $connection->close();
       }
       return $tab;
    }
       
    public static function executeUpdate($sqlQuery){
       $transaction = Transaction::getCurrentTransaction();
       if(!$transaction){
          $connection = new Connection();
       }else{
          $connection = $transaction->getConnection();
       }      
       $query = $sqlQuery->getQuery();
       $result = $connection->executeQuery($query);
       if(!$result){
          throw new Exception(mysql_error());
       }
       return mysql_affected_rows();      
    }
    
  • {databasename}MySqlDAOクラス:DAOジェネレータはこのクラスを生成します。このクラスは特定のデータベースのための一連のDAO関数を提供します。生成されたクラスはgenerated/class/mysqlフォルダに格納され、データベース名に接尾辞「MySqlDAO」を付けたものがクラス名になります。このクラスの生成方法と使用方法は後ほど説明します。
※著者注

 QueryExecutorクラスと{databasename}MySqlDAOクラスはSqlQueryというヘルパークラスを使用します。SqlQueryはSQLステートメントを表現および格納するための関数をカプセル化しています。

 次に例を見ながら説明していきます。

次のページ
DAO成果物の生成

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Octavia Andreea Anghel(Octavia Andreea Anghel)

経験豊富なPHP開発者。現在は、国内外のソフトウェア開発コンテストに参加するプログラミングチームの主任トレーナーを務める。国レベルの教育プロジェクト開発のコンサルティングも担当している。共著書に『XML technologies?XML in Java』があり、XML部分の執筆を担当。PHPやXML...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4576 2009/12/02 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー