stk2k/power-pdo

PDO 强大且轻量级的包装器

0.1.4 2022-04-28 09:03 UTC

This package is auto-updated.

Last update: 2024-08-30 01:43:55 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Code Climate Total Downloads

描述

PDO 强大且轻量级的包装器

特性

  • 流畅查询构建器
  • 支持 POPO(Plain Old Php Object) 实体类
  • 支持 SQL JOIN
  • PSR-3 日志记录器

如何使用

实体类

class UserEntity
{
    public $ID;
    public $deleted;
    public $user_name;
    public $nickname;
    public $email;
}

对于 MySQL

use Stk2k\PowerPDO\PowerPDO;

$dsn = 'mysql:dbname=mydatabase;host=localhost';
$user = 'myuser';
$password = 'mypass';

$ppdo = new PowerPDO(new PDO($dsn, $user, $password));
or 
$ppdo = PowerPDO::make($dsn, $user, $password);

对于 SQLite

use Stk2k\PowerPDO\PowerPDO;

$dsn = 'sqlite:/path/to/dbfile_of_sqlite';
$ppdo = new PowerPDO(new PDO($dsn));
or 
$ppdo = PowerPDO::make($dsn);

日志记录(PSR-3 日志记录器)

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// monolog
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

$ppdo = new PowerPDO(new PDO($dsn), $log);
or 
$ppdo = PowerPDO::make($dsn)->logger($log);

SELECT

// array style
$users = PowerPDO::make($dsn)
    ->select("ID, user_name, nickname, email")
    ->from("users")
    ->where("deleted = 0")
    ->getAll();
foreach($users as $u){
    $uid = $u['ID'];
    $name = $u['user_name'];
    echo "[$uid]$name";
}

// entity style
$users = PowerPDO::make($dsn)
    ->select("ID, user_name, nickname, email")
    ->from("users")
    ->where("deleted = 0")
    ->getAll(UserEntity::class);

foreach($users as $u){
    $uid = $u->ID;
    $name = $u->user_name;
    echo "[$uid]$name";
}

占位符(预编译语句)

$users = PowerPDO::make($dsn)
    ->select("ID, user_name, nickname, email")
    ->from("users")
    ->where("nickname LIKE :nickname")
    ->bind(['nickname' => '%Bi%'])
    ->getAll();

Count

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

$users = PowerPDO::make($dsn)
    ->count()
    ->from("users")
    ->where("deleted = 0")
    ->get();

事务

use Stk2k\PowerPDO\Transaction;
use Stk2k\PowerPDO\exception\TransactionException;

try{
    $tr = new Transaction($pdo);
    $tr->begin();
    // execute UPDATE/DELETE/INSERT SQL here
    $tr->commit();
}
catch(TransactionException $ex){
    $tr->rollback();
}

INSERT

// array style
PowerPDO::make($dsn)
    ->insert()
    ->into("users", "ID, user_name, nickname, email")
    ->values(
        "ID" => "123",
        "user_name" => "hanako", 
        "nickname" => "hana", 
        "email" => "hanako@sample.com"
    )
    ->execute();

// entity style
$new_user = new UserEntity();

$new_user->ID = 123;
$new_user->user_name = 'hanako';
$new_user->nickname = 'hana';
$new_user->email = 'hanako@sample.com';

PowerPDO::make($dsn)
    ->insert()
    ->into("users")
    ->values($new_user)
    ->execute();

UPDATE

// literal style
PowerPDO::make($dsn)
    ->update("users")
    ->set("user_name", "hanako2")
    ->set("email", "hanako2@sample.com")
    ->where("ID = :ID", ['ID'=>1])
    ->execute();

// array style
PowerPDO::make($dsn)
    ->update("users")
    ->values([
            'user_name' => 'hanako2',
            'email' => 'hanako2@sample.com',
        ])
    ->where("ID = :ID", ['ID'=>1])
    ->execute();

// entity style
$new_user = new UserEntity();

$new_user->user_name = 'hanako2';
$new_user->nickname = 'hana2';
$new_user->email = 'hanako2@sample.com';

PowerPDO::make($dsn)
    ->update("users")
    ->values($new_user)
    ->where("ID = :ID", ['ID'=>1])
    ->execute();

DELETE

use Stk2k\PowerPDO\PowerPDO;

// literal style
PowerPDO::make($dsn)
    ->delete()
    ->from("users")
    ->where("email = 'hanako2@sample.com'")
    ->execute();

// placeholder style
PowerPDO::make($dsn)
    ->delete()
    ->from("users")
    ->where("email = :email",['email' => 'hanako2@sample.com'])
    ->execute();

要求

PHP 7.3 或更高版本

安装 stk2k/power-pdo

推荐通过 Composer 安装 stk2k/power-pdo。

composer require stk2k/power-pdo

安装后,您需要引入 Composer 的自动加载器

require 'vendor/autoload.php';

许可证

此库遵循 MIT 许可证。

作者

stk2k

免责声明

此软件不提供任何保修。

我们不承担因使用此软件而产生的任何结果的责任。

请自行负责。