maghead / magsql
适用于PHP的快速而强大的SQL
Requires (Dev)
- corneltek/phpunit-testmore: dev-master
Replaces
This package is not auto-updated.
Last update: 2024-09-14 00:25:24 UTC
README
如果你在寻找一个不是ORM但可以为你生成SQL的工具,那你找到的就是正确的工具。
Magsql不是一个ORM(对象关系映射)系统,而是一个帮助你在PHP中生成跨平台SQL查询的工具集。
Magsql是一个独立的库,你可以通过composer简单地安装它,或者通过自动加载器直接要求它们(类文件),并且它没有依赖项。
特性
- 简单的API,易于记忆。
- 快速且强大。
- 自定义参数标记支持
- 问号参数标记。
- 命名参数标记。
- 可配置的引号处理器。
- 无依赖。
概要
以下是使用通用SelectQuery的一个简短示例
use Magsql\Universal\Query\SelectQuery; use Magsql\Driver\MySQLDriver; use Magsql\Driver\PgSQLDriver; use Magsql\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工具不同,Magsql允许你定义引号风格和参数标记类型。你可以选择两种参数标记类型
- 问号参数标记(
?
) - 命名参数. (
:id
,:name
,:address
,:p1
)
以上两种直接由PDO支持,第一种也由mysqli
和pgsql
扩展支持。
API非常简单,易于记忆,你只需定义一个查询,然后将不同的查询驱动程序传递给查询对象,就可以为目标平台获取不同的SQL字符串。
它还支持跨平台查询生成,目前有三种类型的查询:通用、MySQL、PgSQL。通用查询是跨平台的,你可以使用它们来创建数据库系统的跨平台PHP API,支持的平台有:MySQL、PgSQL和SQLite。
通用查询
- 创建数据库查询
- 删除数据库查询
- 选择查询
- 插入查询
- 更新查询
- 删除查询
- 联合查询
- 创建索引查询
- 删除索引查询
要查看实现细节,请查看Universal
命名空间内的源代码:[https://github.com/maghead/magsql/tree/master/Magsql/Universal/Query](https://github.com/maghead/magsql/tree/master/Magsql/Universal/Query)
MySQL查询
- 创建用户查询
- 删除用户查询
- 授权查询
- 设置密码查询
对于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
参考
- https://dev.mysqlserver.cn/doc/refman/5.0/en/sql-syntax.html
- https://postgresql.ac.cn/docs/8.2/static/sql-syntax.html
- http://www.sqlite.org/optoverview.html
作者
Yo-An Lin (c9s) cornelius.howl@gmail.com