DB Class Tips - dfwLib
DB Class Tips
SQLがうまく実行されない
さしあたりSQLが正しいかチェックして下さい。
getSqlメソッドでSQL文が取得できます。
また、エラーコードや内容も取得できます。
$rtn = $db->exec();
if ($rtn === false) {
// SQL表示
var_dump( $db->getSQL() );
// PDOエラーコード表示
var_dump( $db->getErrorCode() );
// エラーメッセージ表示
var_dump( $db->getErrorMessage() );
// 発生PDO例外表示
var_dump( $db->getPDOException() );
}
DB Class をバッチプログラムで利用する
設定ファイルを読み込む場合
DB接続設定ファイル「dfwConfig.php」を読み込んだあとに、「DfwDB.class.php」を読み込み DB Class を使用します。
<?php
require_once 'dfwConfig.php';
require_once 'DfwDB.class.php';
$db = new DB();
……
DB設定を直接記述する場合
DB接続設定のdefineを直接記述します。「DfwDB.class.php」を読み込み DB Class を使用します。
<?php
require_once 'DfwDB.class.php';
// === DB設定
define('DFW_DB_DSN', 'mysql:dbname=XXXXX;host=localhost');
define('DFW_DB_USER', 'XXXXX');
define('DFW_DB_PASS', 'XXXXX');
$db = new DB();
……
シングルトン(Singleton)で使用する
DB Class の代わりに DBS クラスを使用します。
PDOオブジェクトの取得は、getInstanceメソッドで行います。
※ シングルトンのメリット、デメリットを理解した上で利用してください。
- 使用方法(モジュールでの利用)
<?php
$db1 = DBS::getInstance();
// var_dump($db1);
$db2 = DBS::getInstance('master');
// var_dump($db2);
$db3 = DBS::getInstance('mysql:dbname=XXXXX;host=localhost', 'XXXXX', 'XXXX');
// var_dump($db3);
- 使用方法(バッチプログラム)
<?php
require_once('dfwDB.class.php');
$db1 = DBS::getInstance();
// var_dump($db1);
$db2 = DBS::getInstance('master');
// var_dump($db2);
$db3 = DBS::getInstance('mysql:dbname=XXXXX;host=localhost', 'XXXXX', 'XXXX');
// var_dump($db3);
try - catch を利用する
dfwLib の DB Class は try-catch 例外処理に対応していません。
try-catch を利用したい場合は、以下のどちらかの対応を行ってください。
DB Class を使わない
他のDBアクセスClass や PDO等の DB Class 以外のDBアクセス処理を利用します。
DB Class エラー時に明示的に例外を投げる
DB Class のエラー時に例外を投げることで、例外処理を行います。
try {
$db = new DB();
if (!$db->isConnect()) throw new Exception('Error Connect');
$db->setSql('SELECT * FROM hoge');
$rtn = $db->exec();
if ($rtn === false) throw new Exception('Error exec');
$data = $db->fetch();
if ($data === false) throw new Exception('Error fetch');
$data = $db->fetchNum(2);
if ($data === false) throw new Exception('Error fetchNum');
$data = $db->fetchAll();
if ($data === false) throw new Exception('Error fetchAll');
} catch (Exception $e) {
die($e->getMessage());
}