ここでは、PHP ( OCI8 ) から Oracle データベースに接続しているか判定するサンプルコードを掲載しています。なお、本サンプルは ZendFramework-1.11 のソースコードを一部変更して掲載しています。
ライブラリ等の実装はとても参考になりますので、どんどん良い部分は取り入れていくようにしたいものです。
スポンサーリンク
Oracle に接続中か判定する ( oci8 )
Oracle に接続中か判定するサンプルです。接続中か判定する以外にも拡張ライブラリがロードされているかの判定なども参考になります。
class Oracle_Adapter
{
protected $_connection = null;
// Oracle に接続する
public function connect($persistent = false, $charset = 'AL32UTF8')
{
if (!extension_loaded('oci8')) {
throw new Exception('OCI8 がロードされていません');
}
/*
* すでに接続中の場合は何もしない
*/
if($this->isConnected()) {
return;
}
$funcName = ($persistent == true) ? 'oci_pconnect' : 'oci_connect';
// 一部手抜き(本来はパラメータで設定する)
$this->_connection = @$funcName(
'ユーザー名',
'パスワード',
'DB名',
$charset);
// 接続に成功したか確認する
if (!$this->_connection) {
$error = oci_error();
$message = $error['code'] . ' ' . $error['message']
throw new Exception($message);
}
}
/*
* DBに接続中か確認する
*/
public function isConnected()
{
return ((bool) (is_resource($this->_connection)
&& (get_resource_type($this->_connection) == 'oci8 connection'
|| get_resource_type($this->_connection) == 'oci8 persistent connection')));
}
/*
* 接続している場合はDB切断
*/
public function close()
{
if ($this->isConnected()) {
oci_close($this->_connection);
}
$this->_connection = null;
}
}
接続関数の戻り値がリソース型であるかと、リソースタイプの文字列を確認して、現在 Oracle へ接続中であるかを判定しています。また、一般的かどうかはわかりませんが、データベースへの接続時に extension_loaded 関数によって拡張ライブラリがロードされているも確認しています。開発環境が一旦構築されてしまうと拡張ライブラリロードエラーは出ませんので、必要ないと思われれば外しても良いかもしれません。