プログラム関連

PDO Managerクラス

DBにアクセスするためのPDOラッパークラス

DB接続先指定

$dbConfig = array(
   'default' => array(
       'dsn' => 'mysql:dbname=xxxxxx;host=localhost;charset=utf8',
       'user' => 'xxxxxx',
       'pass' => 'xxxxxx',
   ),
   'master' => array(
       'dsn' => 'mysql:dbname=xxxxxx;host=localhost;charset=utf8',
       'user' => 'xxxxxx',
       'pass' => 'xxxxxx',
   ),
);
\Util\DB::$config = $dbConfig;

初期化(シングルトン)

設定名を引数で指定して初期化します。

$db = \Util\DB::init();                 // 'default' 設定を使用します
$db = \Util\DB::init('master');    // 'master' 設定を使用します

DBクローズ(コネクション切断)

明示的に接続名を指定してクローズします。

$db::close();                      // 'default' 設定コネクションをクローズします
\Util\DB::close();                // 別記載
$db::close('master');         // 'master' 設定コネクションをクローズします
\Util\DB::close('master');   // 別記載

シングルトンを使用しない場合は、以下のように new を用いてオブジェクトを生成します。

$db = new \Util\DB('slave');

シングルトンを使用しない場合は、以下のように PDO でコネクションをクローズします。

$db->dbh = null;

SQL実行の流れ

  • (1) SQL定義
    $db->sql('SELECT * FROM memo WHERE name=:name AND flag=:flag');

  • (2-1) SQLパラメータ設定(通常のやり方)
    $db->set('name', 'tatenosystem'); $db->set('flag', 1);

  • (2-2) SQLパラメータ設定(連想配列で一度に設定)
    $params = array(); $params['name'] ='tatenosystem'; $params['flag'] = 1; $db->set( $params );

  • (2-3) SQL INコマンド(INに設定する場合)
    $db->sql('SELECT * FROM memo WHERE name IN (:names)'); $db->setIn( 'names', array('tatenosystem', 'mahata', 'hoge') ); // IN の場合は setIn メソッド。配列を設定

  • (3-1)SQL実行(1レコード取得)
    $item = $db->execFetchOne(); var_dump( $item );

  • (3-2) SQL実行(全レコード取得)
    $items = $db->execFetchAll(); var_dump( $items );

基本的な使い方

-SELECT
$db->setSql('SELECT * FROM memo WHERE id = :id'); $db->set('id', 35); $data = $db->execFetchOne(); // 戻り値は1レコード(配列)。結果がなかった場合は空配列

-SELECT
$db->setSql('SELECT * FROM memo WHERE name = :name OR id = :id'); $db->set('name', 'tatenosystem'); $db->set('id', 35); $data = $db->execFetchAll(); // 戻り値は全レコード(2次元配列)。結果がなかった場合は空配列

-UPADTE
$db->setSql('UPDATE memo SET name = :name WHERE id = :id'); $db->set('name', 'tatenosystem'); $db->set('id', 35); $rtn = $db->exec(); // exec() の戻り値は更新レコード件数

-INSERT
$db->setSql('INSERT INTO memo (name, age) VALUES (:name, :age)'); $db->set('name', 'baby'); $db->set('age', 2); $rtn = $db->exec(); // exec() の戻り値は更新レコード件数

FETCH 処理

-SELECT実行(1レコードずつ取得)
$db->exec(); while( true ) {  $item = $db->fetch();  if( empty($item) ) break; // 取得終了時は空配列となる  var_dump( $item ); }

トランザクション機能

  • トランザクションの開始
$rtn = $db->transaction();

成功した場合に true を、失敗した場合に false を返します。

  • コミット
$rtn = $db->commit();

成功した場合に true を、失敗した場合に false を返します。

  • ロールバック
$rtn = $db->rollBack();

成功した場合に true を、失敗した場合に false を返します。

最終行の取得(最終INSERT id の取得)

$id = $db->lastInsertId();

※PDO lastInsertId()のラッパー関数