PHP 超簡易DBライブラリ EzDB を使うには?

ショコラ
ショコラ

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 の使い方。

  1. ポストグレスに接続するための環境変数を設定します。
export POSTGRES_HOST=localhost
export POSTGRES_PORT=5432
export POSTGRES_DBNAME=answorz
export POSTGRES_USER=mossan
export POSTGRES_PASSWORD=123456
  1. データベースに接続します。
<?php
require_once('EzDB.php');
$EzDB = EzDB::connect();
  1. 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メソッドでインサートとアップデートを行います。

以上

Scroll to Top