5.6. PDOを用いたデータベースアクセス

5.6.1. PDOを継承するクラスを使用する

PDOクラスを継承する任意のクラスを作成します。クラスのコンストラクタでデータソースを設定します。

例として、次のようなSqlitePdoクラスを /path/to/classes/SqlitePdo.php に作成します。

<?php
class SqlitePdo extends \PDO {
    public function __construct() {
        parent::__construct('sqlite:' . DB_DIR . '/sqlite.db');
        $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
}

作成したPDOクラスを使用するCdDaoを /path/to/classes/CdDao.php に作成します。

<?php
class CdDao {
    public $sqlitePdo = null;
    public function findAll() {
        $stmt = $this->sqlitePdo->prepare('select * from CD');
        $stmt->setFetchMode(PDO::FETCH_OBJ);
        $stmt->execute();
        return $stmt->fetchAll();
    }
}

PDOクラスやCdDaoクラスをS2ApplicationContextでimportします。

<?php
require_once('S2Container/S2Container.php');
define('DB_DIR', dirname(__FILE__) . '/db');
use seasar\container\S2ApplicationContext as s2app;

s2app::import(dirname(__FILE__) . '/classes');
$cdDao = s2app::get('CdDao');
var_dump($cdDao->findAll());


5.6.2. DICONファイルでPDOを設定する

DICONファイルでPDOの設定を行います。例として、次のようなDICONファイルを /path/to/dicons/pdo.dicon として作成します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components>
   <component name="sqlitePdo" class="PDO">
       <arg>return 'sqlite:' . DB_DIR . '/sqlite.db'</arg>
   </component>
</components>

作成したDICONファイルやCdDaoクラスをS2ApplicationContextでimportします。

<?php
require_once('S2Container/S2Container.php');
use seasar\container\S2ApplicationContext as s2app;

use seasar\container\S2ApplicationContext as s2app;

s2app::import(dirname(__FILE__) . '/classes/CdDao.php');
s2app::import(dirname(__FILE__) . '/dicon');
$cdDao = s2app::get('CdDao');
var_dump($cdDao->findAll());

[注意]NOTE

このExampleは examples/misc/datasource にあります。



© Copyright The Seasar Foundation and the others 2005-2010, all rights reserved.