c9s/sqlbuilder

此包已被废弃,不再维护。作者建议使用 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

Universql查询

  • 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('');

使用 PostgreSQL 数据库进行测试

sudo -u postgres createdb sqlbuilder

参考

作者

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