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 许可证 授权。