ショコラ
PHP 超簡易DBライブラリ EzDB を使うには?
EzDB.php を「https://answorz.com/925/EzDB.php」から取得する。
ポイントは
①1ファイル。ソースも短いのでカスタマイズして使える。
②PHP5.1~対応。
③環境変数を使ってデータベースに接続する。
もっさん先輩
こちらのリンクを右クリックしてファイルをダウンロードできます。
curl -LO https://answorz.com/925/EzDB.php
EzDB.php のソースは↓こちらです。
<?php
if (!function_exists('connect')) {
function _getenv( $env, $default = null ) {
$val = getenv($env);
return empty($val) ? $default : $val;
}
function connect() {
$HOST = _getenv('POSTGRES_HOST','localhost');
$PORT = _getenv('POSTGRES_PORT','5432');
$DBNAME = _getenv('POSTGRES_DBNAME');
$USER = _getenv('POSTGRES_USER');
$PASSWORD = _getenv('POSTGRES_PASSWORD');
$options = array(
PDO::ATTR_CASE => \PDO::CASE_LOWER,
PDO::ATTR_CURSOR => \PDO::CURSOR_FWDONLY,
PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
);
return new PDO("pgsql:host={$HOST} port={$PORT} dbname={$DBNAME}",$USER,$PASSWORD,$options);
}
}
function getOne( $pdo, $sql, $params = array() ) {
$stm = $pdo->prepare($sql);
$stm->execute($params);
return $stm->fetchColumn();
}
function getRow( $pdo, $sql, $params = array() ) {
$stm = $pdo->prepare($sql);
$stm->execute($params);
return $stm->fetch(\PDO::FETCH_ASSOC);
}
function getAll( $pdo, $sql, $params = array() ) {
$stm = $pdo->prepare($sql);
$stm->execute($params);
return $stm->fetchAll(\PDO::FETCH_ASSOC);
}
function select( $pdo, $sql, $params = array() ) {
return getAll($pdo,$sql,$params);
}
function query( $pdo, $sql, $params = array() ) {
$stm = $pdo->prepare($sql);
$stm->execute($params);
return $stm;
}
function execute( $pdo, $sql, $params = array() ) {
$stm = $pdo->prepare($sql);
return $stm->execute($params);
}
function reg( $pdo, $table, $params, $pkey ) {
$insert_params = array();
$update_columns = array();
$update_condition = array();
$update_params = array();
$placeholders = array();
foreach ($params as $col => $val) {
$mark = $col[0];
if (in_array($mark,array('!',':','?')))
$col = substr($col,1);
$params[$col] = $val;
if (('' == $val) && (('!' == $mark) || (':' != $mark))) {
list($mark,$val) = array('!','NULL');
}
if ('!' == $mark) {
$insert_params[$col] = $val;
$update_columns[] = "{$col}={$val}";
}
else {
$insert_params[$col] = ":{$col}";
$update_columns[] = "{$col}=:{$col}";
$placeholders[":{$col}"] = $val;
}
}
foreach ($pkey as $col) {
$update_condition[] = "{$col}=:PK{$col}";
$update_params[":PK{$col}"] = isset($params[$col]) ? $params[$col] : '';
}
$update_condition = implode(' AND ',$update_condition);
$sql = "UPDATE {$table} SET ".implode(',',$update_columns)." WHERE {$update_condition}";
if (false === getOne($pdo,"SELECT 1 FROM {$table} WHERE {$update_condition}",$update_params)) {
$update_params = [];
$sql = "INSERT INTO {$table} (".implode(",",array_keys($insert_params)).") VALUES (".implode(',',array_values($insert_params)).")";
}
execute($pdo,$sql,array_merge($placeholders,$update_params));
}
function begin( $pdo ) {
execute($pdo,'begin');
}
function commit( $pdo ) {
execute($pdo,'commit');
}
function rollback( $pdo ) {
execute($pdo,'rollback');
}
class EzDB {
public static $EzDB;
public $pdo;
public static function connect() {
if (is_null(self::$EzDB)) {
self::$EzDB = new EzDB;
self::$EzDB->pdo = connect();
self::$EzDB->pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,false);
}
return self::$EzDB;
}
public function getOne( $sql, $params = array() ) {
return getOne($this->pdo,$sql,$params);
}
public function getRow( $sql, $params = array() ) {
return getRow($this->pdo,$sql,$params);
}
public function getAll( $sql, $params = array() ) {
return getAll($this->pdo,$sql,$params);
}
public function select( $sql, $params = array() ) {
return select($this->pdo,$sql,$params);
}
public function query( $sql, $params = array() ) {
return query($this->pdo,$sql,$params);
}
public function execute( $sql, $params = array() ) {
return execute($this->pdo,$sql,$params);
}
public function reg( $table, $params, $pkey ) {
reg($this->pdo,$table,$params,$pkey);
return $this;
}
public function begin() {
begin($this->pdo);
return $this;
}
public function commit() {
commit($this->pdo);
return $this;
}
public function rollback() {
rollback($this->pdo);
return $this;
}
}
使い方
超簡易DBライブラリ EzDB の使い方。
- ポストグレスに接続するための環境変数を設定します。
export POSTGRES_HOST=localhost
export POSTGRES_PORT=5432
export POSTGRES_DBNAME=answorz
export POSTGRES_USER=mossan
export POSTGRES_PASSWORD=123456
- データベースに接続します。
<?php
require_once('EzDB.php');
$EzDB = EzDB::connect();
- SQL を実行します。
echo $EzDB->getOne("SELECT COUNT(*) FROM wp_posts");
以上
例
EzDB で検索する例。
<?php
require_once('EzDB.php');
// 関数で使う。
$pdo = connect();
var_dump(getOne($pdo,"SELECT COUNT(*) FROM wp_posts"));
var_dump(getRow($pdo,"SELECT * FROM wp_posts"));
var_dump(getAll($pdo,"SELECT * FROM wp_posts LIMIT 3"));
foreach (query($pdo,"SELECT * FROM wp_posts LIMIT 3") as $post) {
var_dump($post);
}
// クラスで使う。
$EzDB = EzDB::connect();
var_dump($EzDB->getOne("SELECT COUNT(*) FROM wp_posts"));
var_dump($EzDB->getRow("SELECT * FROM wp_posts"));
var_dump($EzDB->getAll("SELECT * FROM wp_posts LIMIT 3"));
foreach ($EzDB->query("SELECT * FROM wp_posts LIMIT 3") as $post) {
var_dump($posts);
}
EzDB で登録する例。
<?php
require_once('EzDB.php');
$EzDB = EzDB::connect();
$post = array(
'id' => 1,
'title' => 'PHP 超簡易DBライブラリ EzDB を使うには?',
'!updated_at' => "datetime('now','localtime')",
);
$EzDB->begin()->reg('post',$post,array('id'))->commit();
regメソッドでインサートとアップデートを行います。
以上