corneltek/sqlbuilder

PHP 快速且强大的 SQLBuilder

4.0.1 2021-11-04 04:20 UTC

README

Build Status Coverage Status Latest Stable Version Total Downloads Monthly Downloads Latest Unstable Version License

如果您正在寻找的不是 ORM 但可以为您生成 SQL 的工具,您已经找到了正确的选择。

SQLBuilder 不是一个 ORM(对象关系映射)系统,而是一组工具,它帮助您在 PHP 中生成跨平台的 SQL 查询。

SQLBuilder 是一个独立的库,您可以通过 composer 安装它,或者只需用您的自动加载器引入(类文件),并且没有依赖。

特性

  • 简单 API,易于记忆。
  • 快速且强大。
  • 自定义参数标记支持
    • 问号参数标记。
    • 命名参数标记。
  • 可配置的引号处理程序。
  • 零依赖。

概要

以下是使用通用 SelectQuery 的简短示例

use SQLBuilder\ArgumentArray;
use SQLBuilder\Universal\Query\SelectQuery;
use SQLBuilder\Driver\MySQLDriver;
use SQLBuilder\Driver\PgSQLDriver;
use SQLBuilder\Driver\SQLiteDriver;

$mysql = new MySQLDriver;
$args = new ArgumentArray;

$query = new SelectQuery;
$query->select(array('id', 'name', 'phone', 'address','confirmed'))
    ->from('users', 'u')
    ->partitions('u1', 'u2', 'u3')
    ->where()
        ->is('confirmed', true)
        ->in('id', [1,2,3])
    ;
$query
    ->join('posts')
        ->as('p')
        ->on('p.user_id = u.id')
    ;
$query
    ->orderBy('rand()')
    ->orderBy('id', 'DESC')
    ;

$sql = $query->toSql($mysql, $args);

var_dump($sql);
var_dump($args);

更详细说明

与其他 SQL 工具不同,SQLBuilder 允许您定义引号样式和参数标记类型。您可以选择两种参数标记类型

  1. 问号参数标记 (?)
  2. 命名参数. (:id, :name, :address, :p1)

上述两种都由 PDO 直接支持,第一种也由 mysqlipgsql 扩展支持。

API 简单至极,易于记忆,您只需定义一个查询,然后将不同的查询驱动程序传递给查询对象,即可为目标平台获取不同的 SQL 字符串。

它还支持跨平台查询生成,目前有三种查询类型:通用MySQLPgSQL。通用查询是跨平台的,您可以使用它们来创建数据库系统的跨平台 PHP API,支持的平台有:MySQLPgSQLSQLite

通用查询

  • CreateDatabaseQuery
  • DropDatabaseQuery
  • SelectQuery
  • InsertQuery
  • UpdateQuery
  • DeleteQuery
  • UnionQuery
  • CreateIndexQuery
  • DropIndexQuery

要查看实现细节,您可以查看 通用 命名空间内的源代码:https://github.com/c9s/SQLBuilder/tree/master/SQLBuilder/Universal/Query

MySQL 查询

  • CreateUserQuery
  • DropUserQuery
  • GrantQuery
  • SetPasswordQuery

对于 MySQL 平台,实现是根据 MySQL 5.6 规范进行的。

对于 PostgreSQL 平台,实现是根据 PostgreSQL 9.2 规范进行的。

安装

通过 Composer 安装

composer require corneltek/sqlbuilder

入门

文档

开发

composer install

复制 phpunit.xml 文件以进行本地配置

phpunit -c your-phpunit.xml tests

贡献

使用 mysql 数据库进行测试

mysql -uroot -p
CREATE DATABASE sqlbuilder CHARSET utf8;
GRANT ALL PRIVILEGES ON sqlbuilder.* TO 'testing'@'localhost' identified by '';

--- or use this to remove password for testing account
SET PASSWORD FOR testing@localhost=PASSWORD('');

使用 pgsql 数据库进行测试

sudo -u postgres createdb sqlbuilder

参考

作者

Yo-An Lin (c9s) cornelius.howl@gmail.com