PHP用の最薄DBアクセスクラス作った
投稿日: 2011年05月19日 更新日: 2017年07月22日
PHPのDBアクセスクラス(PostgreSQL用)を書いた。
コンセプトは「薄い」ラッパークラスであること。
ちなみに目的は未だにPEAR DBを使ってたサイトの改修。
最薄のラッパーを書こうとすると自然にこうなる。逆にこれ以上をやるならMDB2とかADOdbとかPDO使えばいいと思われ。
なぜ車輪の再開発したかというと
- DBアクセスの抽象化はしておきたかった
- レンサバだとPDO使えない可能性がある
- (動作が)軽い
- (容量が)軽い
- ファイル数を増やさずに済む。この1ファイルだけ。
使い方
<?php
require_once 'database.php';
$db = new Database
$res = $db->connect('host=db.example.com dbname=hoge user=hoge password=******');
if($res === false){
echo 'db connect error!';
exit;
}
// プリペアドクエリの場合
$res = $db->execute('SELECT * FROM people WHERE name=$1', array('hajime'));
// プリペアドクエリじゃない場合
// $res = $db->query("SELECT * FROM people WHERE name='hajime'");
if($res === false){
echo 'query error!';
exit;
}
while(($data = $db->fetch()) !== false){
print_r($data);
}
クラスのソース
<?php
class Database
{
private $_handle = null;
private $_resource = null;
function connect($connection_string)
{
$this->_resource = null;
$this->_handle = @pg_connect($connection_string);
if($this->_handle === false){
$this->_handle = NULL;
return false;
}
return true;
}
function query($sql)
{
$this->_resource = null;
$res = @pg_query($this->_handle, $sql);
if($res === false){
return false;
}
$this->_resource = $res;
return true;
}
function execute($sql, $params = array())
{
$this->_resource = null;
$res = @pg_prepare($this->_handle, '', $sql);
if(!$res){
return false;
}
$res = @pg_execute($this->_handle, '', $params);
if($res === false){
return false;
}
$this->_resource = $res;
return true;
}
function fetch()
{
return @pg_fetch_assoc($this->_resource);
}
function getOne($sql, $params = array())
{
$res = $this->execute($sql, $params);
if($res === false){
return false;
}
foreach($this->fetch() as $v){
return $v;
}
return false;
}
function getRow($sql, $params = array())
{
$res = $this->execute($sql, $params);
if($res === false){
return false;
}
return $this->fetch();
}
function affectedRows()
{
return @pg_affected_rows($this->_resource);
}
function getLastError()
{
return @pg_last_error($this->_resource);
}
}
名前:宮内 はじめ
Code for Nagoya名誉代表
E2D3名古屋支部長
プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。