stule-ru/modernpdo

简单PDO库的源代码。

v3.0.0 2023-09-03 11:21 UTC

This package is auto-updated.

Last update: 2024-09-05 06:35:52 UTC


README

Downloads Release Code Coverage Badge Forks Stars License

此仓库包含ModernPDO代码,这是一个用于通过PDO操作数据库的库。
该库保证支持以下数据库: MySQLMariaDBPostgreSQLSQLite3 和自定义PDO。

📝 目录

🧐 关于

此仓库包含ModernPDO代码,这是一个用于通过PDO操作数据库的库。其中包含了一些基本数据库操作工具。
例如,您可以看到用于插入、删除、选择等的类。
您可以使用此库代替PDO,这使得项目开发更加容易。

🏁 入门

安装

该库使用composer自动加载器来包含文件,因此您需要安装 Composer。如果您从未使用过Composer,请阅读 手册。您可以通过命令行或composer.json进行安装。

使用命令行

  1. 在控制台中运行命令 composer require stule-ru/modernpdo

使用composer.json

  1. "stule-ru/modernpdo": "^3.0.0" 添加到您的composer.json中。
...
   "require": {
        ...
        "stule-ru/modernpdo": "^3.0.0"
        ...
   }
...
  1. 在控制台中运行命令 composer install

🎈 用法

关于结构

注意
如果您只想使用库而不考虑实现,请安装使用
其他人,欢迎来到地狱 =)

关于源代码

源代码包含

这允许您添加代码而不是重写代码(MySQLDriverPostgreSQLDriverSQLite3Driver 扩展 ModernPDO 等)

因此,如果您需要,您可以扩展所有通用类以实现您的目标。

通用类

驱动器

关于测试

有 2 种类型的测试:集成测试单元测试

初始化示例

use ModernPDO\ModernPDO;
use ModernPDO\Drivers\MySQLDriver;
use ModernPDO\Drivers\MariaDBDriver;
use ModernPDO\Drivers\PostgreSQLDriver;
use ModernPDO\Drivers\SQLite3Driver;

// Initiolize by PDO
$mpdo = new ModernPDO(
    pdo: $pdo,
);

// Initiolize MySQL
$mpdo = new MySQLDriver(
    host: $host,
    database: $database,
    username: $username,
    password: $password,
    charset: $charset,
    //port: $port,
);

// Initiolize MariaDB
$mpdo = new MariaDBDriver(
    host: $host,
    database: $database,
    username: $username,
    password: $password,
    charset: $charset,
    //port: $port,
);

// Initiolize PostgreSQL
$mpdo = new PostgreSQLDriver(
    host: $host,
    database: $database,
    username: $username,
    password: $password,
    //port: $port,
);

// Initiolize SQLite3
$mpdo = new SQLite3Driver(
    mode: $mode,
);

查询示例

// Row query

$mpdo->exec('CREATE TABLE table_name (id int, name varchar(32));');

// Prepared queries

$stmt = $mpdo->query("SELECT * FROM table_name", []);

// Check query status
if ($stmt->status()) {

    // Get counts
    $stmt->rowCount();
    $stmt->columnCount();

    $stmt->fetchColumn($column); // Fetch cell
    $stmt->fetchObject(); // Fetch row as object
    $stmt->fetch(); // Fetch row as array
    $stmt->fetchAll(); // Fetch all rows as array
}

CRUD 示例

//
// Insert example
//

// INSERT INTO table (id, name) VALUES (10, 'test'), (11, 'test')
$mpdo->insert('table')->columns([
    'id', 'name',
])->values([
    [10, 'test'],
    [11, 'test'],
])->execute();

// INSERT INTO table VALUES (12, 'test')
$mpdo->insert('table')->values([
    [12, 'test'],
])->execute();

//
// Select examples
//

// SELECT * FROM table
$mpdo->select('table')->rows();

// SELECT * FROM table WHERE id=10 LIMIT 1
$mpdo->select('table')->where('id', 10)->row();
// SELECT * FROM table WHERE id=10 AND name='test' LIMIT 1
$mpdo->select('table')->where('id', 10)->and('name', 'test')->row();

// SELECT id, name FROM table
$mpdo->select('table')->columns(['id', 'name'])->rows();

// SELECT COUNT(*) FROM table
$mpdo->select('table')->columns([new Count()])->cell();

// SELECT SUM(amount) FROM table WHERE id BETWEEN 10 AND 50
$mpdo->select('table')->columns([new Sum('amount')])->where('id', new Between(10, 50))->cell();

// SELECT table.id AS id, table.name AS name, join_table.lastname AS lastname FROM table INNER JOIN join_table ON table.id=join_table.id
$mpdo->select('table')->columns([
    'id' => 'table.id',
    'name' => 'table.name',
    'lastname' => 'join_table.lastname',
])->innerJoin('join_table')->on('table.id', 'join_table.id')->rows();

// SELECT * FROM table ORDER BY id ASC
$mpdo->select('table')->orderBy('id')->rows();

// SELECT * FROM table LIMIT 1 OFFSET 10
$mpdo->select('table')->limit(1, 10)->row();

//
// Update example
//

// UPDATE table SET name='Mr. Gorski' WHERE id=10
$mpdo->update('table')->set(['name' => 'Mr. Gorski'])->where('id', 10)->execute();

//
// Delete example
//

// DELETE FROM table WHERE id NOT IN (10, 11, 20)
$mpdo->delete('table')->where('id', new NotIn([10, 11, 20]))->execute();

表示例

//
// Create Table
//

// CREATE TABLE IF NOT EXISTS table (id INT NOT NULL, email TEXT NOT NULL, name VARCHAR(32) NOT NULL)
$mpdo->createTable('table')->checkIfExists()->fields([
    new IntField('id'),
    new TextField('email'),
    new VarcharField('name', 32),
])->execute();

// CREATE TABLE IF NOT EXISTS table (id INT UNSIGNED NULL DEFAULT 100)
$mpdo->createTable('table')->checkIfExists()->fields([
    new IntField('id', unsigned: true, canBeNull: true, default: 100),
])->execute();

// CREATE TABLE IF NOT EXISTS table (id INT NOT NULL, PRIMARY KEY (id))
$mpdo->createTable('table')->checkIfExists()->fields([
    new IntField('id'),
])->keys([
    new PrimaryKey('id'),
])->execute();

//
// Update Table
//

// ALTER TABLE table RENAME TO new_table
$mpdo->alterTable('table')->rename('new_table')->execute();

// ALTER TABLE table ADD COLUMN amount INT NOT NULL
$mpdo->alterTable('table')->addColumns([
    new IntField('amount'),
])->execute();

// ALTER TABLE table RENAME COLUMN column TO new_column
$mpdo->alterTable('table')->renameColumns([
    'column' => 'new_column',
])->execute();

// ALTER TABLE table DROP COLUMN column
$mpdo->alterTable('table')->dropColumns([
    'column',
])->execute();

//
// Drop Table
//

// DROP TABLE IF EXISTS table
$mpdo->dropTable('table')->checkIfExists()->execute();

事务示例

$transaction = $mpdo->transaction();

$transaction->begin();

try {
    if (!$transaction->isActive()) {
        // Your code...
    }

    // Your code...

    $transaction->commit();
} catch (\Throwable $ex) {
    $transaction->rollBack();

    throw $ex;
}

🔧 运行测试

有很多测试工具:集成/单元测试(PHPUnit)、PHPStan、PSalm 和 CSFixer。
如果您想开始运行测试,需要在终端运行 composer 脚本

注意: 您无法启动集成测试

级别

  • PHPStan:级别 9
  • PSalm:级别 1

Composer 脚本

测试

  • composer tests - 运行所有 PHPUnit 测试(不要运行它)
  • composer i-tests - 运行集成 PHPUnit 测试(不要运行它)
  • composer u-tests - 运行单元 PHPUnit 测试
  • composer ca-tests - 定义所有测试覆盖率(不要运行它)
  • composer ica-tests - 定义集成测试覆盖率(不要运行它)
  • composer uca-tests - 定义单元测试覆盖率

PHPStan

  • composer stan - 将错误写入 phpstan-report.xml
  • composer stan-bl - 将错误写入 phpstan-baseline.neon

PSalm

  • composer salm - 将错误写入 psalm-report.xml
  • composer salm-bl - 将错误写入 psalm-baseline.xml

编码规范修复器

  • composer csfix - 修复所有 PHP 文件的编码规范

⛏️ 构建

语言

  • PHP - 版本 >= 8.1

实用工具

✍️ 作者