PHPライブラリ dfwLib

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());
}