ucscode / squery
PHP SQL 语法生成器
3.1.0
2024-02-24 08:58 UTC
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^10
README
PHP SQL 语法生成器
简介
最初为 User Synthetics 制作,SQuery 已经发展到成为一个独立的 PHP 库,简化了生成数据库查询 SQL 语法的流程。使用 sQuery,您可以使用直观流畅的接口构建 SQL 查询,减少直接编写 SQL 的需求。它支持各种 SQL 操作,如 SELECT、FROM、JOIN、WHERE、GROUP BY 等。
SQuery 类提供了一种简化和高效的方式来与 PHP 中的数据库交互,特别是通过简化 CRUD(创建、读取、更新、删除)操作。
特性
- SQuery 确保即使方法调用顺序不正确,SQL 语法的正确顺序。
- SQuery 支持几乎所有与 SQL 关键字相关的函数。
- 以结构化和可读的方式构建 SQL 查询。
- 支持常见的 SQL 操作,如
SELECT、FROM、JOIN、WHERE、GROUP BY、ORDER BY和LIMIT。 - 通过方法链轻松生成复杂查询。
- 设计用于提高代码可维护性并降低 SQL 注入的风险。
要求
- PHP 8.1 或更高版本。
- 兼容的数据库(例如 MySQL、MariaDB)和适当的数据库扩展(例如 MySQLi、PDO)以执行生成的查询。
安装
composer require ucscode/squery
SELECT SQL 示例
use Ucscode\SQuery\SQuery; use Ucscode\SQuery\Condition; $squery = new SQuery(); $condition = new Condition(); $condition ->add("u.vendor", "ucscode") ->and("u.namespace", "SQuery") ->or("u.foundation", "Uss%", 'RLIKE'); $squery ->select("u.username") ->from("tablename", "u") ->where($condition) ->limit(2) ->groupBy('u.id', 'DESC') ; echo $squery->build();
INSERT SQL 示例
$data = [ 'username' => 'Ucscode', 'password' => '12345', 'role' => 'SUPER_ADMIN' ]; $squery = new SQuery(); $squery->insert('tablename', $data);
UPDATE SQL 示例
$data = [ 'username' => 'User Synthetics', 'password' => '54321', 'role' => 'PROJECT' ]; $condition = new Condition(); $condition ->add("user_id", 1) ->and('role', 'SUPER_ADMIN') ->or('username', 'spider-man', 'NOT') ->and('finance', null, 'IS NOT'); $squery = new SQuery(); $squery ->update('tablename', $data) ->where($condition);
DELETE SQL 示例
- 要生成 DELETE 查询,请使用
delete()方法
$squery = new SQuery(); $condition = new Condition(); $condition->add("username", "trouble-maker"); $squery ->delete() ->from('tablename') ->where($condition);
使用 JOIN 语句
SQuery 使用一个 Join 对象的实例来创建和管理不同类型的 JOIN 语句。例如
LEFT JOIN 示例
$squery = new SQuery(); $squery ->select([ "t1.*", "t2.value", "t1.status", ]) ->from('tablename', "t1"); // Left Join $leftJoin = new Join('table_2'); $on = (new Condition()) ->add("t2.user_id", "t1.id") ->and("t2.name", null); $leftJoin->setOn($on); $leftJoin->setAlias("t2"); $squery->leftJoin($leftJoin);
同样适用于其他 JOIN 语句,如 RIGHT JOIN、INNER JOIN 等
Join 对象实际上接受一个 SQuery 对象作为其第一个参数,使其能够处理复杂的 SQL 语句。
示例
$squery = new SQuery(); $squery ->select('*') ->from('table_1', 't1'); // Create Complex Join Statement; $rightJoinQuery = (new SQuery()) ->select("*") ->from("table_2") ->where( (new Condition()) ->add("name", "ucscode") ->and("age", 3, ">") ) ->limit(7); $onCondition = (new Condition()) ->add("t1.port", "t2.port", null, false) ->or("t1.status", null, 'IS NOT'); $alias = "t2"; $rightJoin = new Join($rightJoinQuery, $onCondition, $alias); // Add the Right Join Statement $squery->rightJoin($rightJoin);
注意!
请注意,SQuery 库不会自动清理用户输入。在库的使用过程中,在将任何用户提供的输入作为参数传递给 SQuery 方法之前,必须清理这些数据。
注意
请注意,SQuery 类仅生成 SQL 查询字符串;它不会在数据库上执行这些查询。要执行这些查询,您需要建立数据库连接并使用 MySQLi 或 PDO 库的适当方法。
许可
本项目受 MIT 许可证 授权。