sqlbuilder/phpsqlbuilder

php 查询构建器,用于执行不同数据库系统的 SQL 查询。

1.0.0 2023-03-15 22:43 UTC

This package is auto-updated.

Last update: 2024-09-30 02:00:06 UTC


README

PHP 查询构建器,用于创建和执行不同数据库系统的 SQL 查询。

查询构建器支持 mysql postgresql sql server sqlite,并提供大量方法来覆盖大多数 SQL 语句,并对数据进行限制和参数化,以验证和过滤用户输入,从而防止 SQL 注入。

通过 composer 安装

composer require sqlbuilder/phpsqlbuilder

示例

require ('vendor/autoload.php');

// Connect to database
$sql = new PhpSqlBuilder\SQL([
	'driver' => 'mysql', // support (mysql, pgsql, sqlsrv, sqlite)
	'host' => '127.0.0.1',
	'database' => 'test',
	'user' => 'root',
	'password' => '',
	'port' => 3306,
	'charset' => 'utf8',
]);

// Build your SQL Query
$result = $sql->table('users')
              ->select(['id', 'name'])
              ->where('id')->value('>', 16)
              ->orderBy('id')
              ->limit(5)
              ->get();

可用方法

table

定义数据库表名。

$result = $sql->table('tablename')
              ->all()
              ->get();

get

返回一个对象,其中包含 SQL 查询的结果。您必须在查询构建器的末尾调用此方法。

$result = $sql->table('tablename')
              ->all()
              ->get();

all

选择所有列。

$result = $sql->table('tablename')
              ->all()
              ->get();

select

选择特定列。

$result = $sql->table('tablename')
              ->select(['col1', 'col2', 'col3'])
              ->get();

selectTop

选择有限行。(仅支持 sql server)

$result = $sql->table('tablename')
              ->selectTop(4, ['col1', 'col2'])
              ->get();

distinct

选择不同的行。

$result = $sql->table('tablename')
              ->distinct(['col1', 'col2', 'col3'])
              ->get();

alias

使用别名选择。

$result = $sql->table('tablename')
              ->alias([
              	'column1' => 'alias name',
              	'column2' => 'alias name'
              ])
              ->get();

聚合函数

使用聚合函数(MAX, MIN, COUNT, SUM, AVG)选择。

$result = $sql->table('tablename')
              ->count('id')
              ->max('price', 'unitprice')
              ->min('price')
              ->avg('price')
              ->sum('id')
              ->get();

where

添加 where 子句以指定条件。

$result = $sql->table('tablename')
              ->all()
              ->where('col')->value('=', 5)
              ->get();

whereNot

在 where 子句中添加 NOT 关键字。

$result = $sql->table('tablename')
              ->all()
              ->whereNot('col')->value('<', 5)
              ->get();

isNull isNotNull

// IS NULL
$result = $sql->table('tablename')
              ->all()
              ->where('col')->isNull()
              ->get();

// IS NOT NULL
$result = $sql->table('tablename')
              ->all()
              ->where('col')->isNotNull()
              ->get();

like 在之间

// LIKE
$result = $sql->table('tablename')
              ->all()
              ->where('col')->like('%pattern%')
              ->get();

// IN
$result = $sql->table('tablename')
              ->all()
              ->where('col')->in([45, 76, 88])
              ->get();

// BETWEEN
$result = $sql->table('tablename')
              ->all()
              ->where('col')->between(2, 10)
              ->get();

and or not

这些运算符可以与查询结合使用,以添加多个条件。

// AND
$result = $sql->table('tablename')
              ->all()
              ->where('col')->value('=', 'value')
              ->and('col2')->value('=', 'value')
              ->get();

// OR
$result = $sql->table('tablename')
              ->all()
              ->where('col')->value('=', 'value')
              ->or('col2')->value('=', 'value')
              ->get();

// NOT (does not accept parameters)
$result = $sql->table('tablename')
              ->all()
              ->where('col')->not()->value('=', 'value')
              ->get();

joins

// INNER JOIN
$result = $sql->table('table1')
              ->innerJoin('table2', 'table1.column', '=', 'table2.column')
              ->get();

// LEFT JOIN
$result = $sql->table('table1')
              ->leftJoin('table2', 'table1.column', '=', 'table2.column')
              ->get();

// RIGHT JOIN
$result = $sql->table('table1')
              ->rightJoin('table2', 'table1.column', '=', 'table2.column')
              ->get();

// FULL OUTER JOIN
$result = $sql->table('table1')
              ->fullJoin('table2', 'table1.column', '=', 'table2.column')
              ->get(); 

// CROSS JOIN (accept 1 string parameter)
$result = $sql->table('table1')
              ->crossJoin('table2')
              ->get();

limit

检索有限行。

$result = $sql->table('tablename')
              ->all()
              ->limit(5)
              ->get();

union unionAll

用于合并两个表的结果。

// UNION
$result = $sql->table('tablename')
              ->select(['column1', 'column2'])
              ->union(['column1', 'column2'], 'table2')
              ->get();

// UNION ALL
$result = $sql->table('tablename')
              ->select(['column1', 'column2'])
              ->unionAll(['column1', 'column2'], 'table2')
              ->get();

groupBy

用于将相同的数据排列成组。

$result = $sql->table('tablename')
              ->select(['col1', 'col2'])
              ->groupBy(['col1'])
              ->get();

having

与 GROUP BY 一起使用,以指定条件。

$result = $sql->table('tablename')
              ->select(['col1', 'col2'])
              ->groupBy(['col1'])
              ->having('col1')->value('=', 'value')
              ->get();

orderBy

用于根据特定列对行进行排序。

$result = $sql->table('tablename')
              ->all()
              ->orderBy(['col'], 'ASC') // default DESC
              ->get();

delete

您必须在插入、更新和删除方法的末尾使用 save() 方法来执行 SQL 查询。

// EX 1
$sql->table('tablename')
    ->delete()
    ->where('col')->value('=', 1)
    ->save(); // execute

// EX 2
$sql->table('tablename')
    ->delete()
    ->where('col')->in(['val1', 'val2', 'val3'])
    ->save();

truncate

// EX 1
$sql->table('tablename')
    ->truncate()
    ->save();

insert

$sql->table('tablename')
	->insert([
        'id' => 84,
        'name' => 'ahmed',
        'email' => 'ahmed@gmail.com'
	])->save(); 

update

$sql->table('tablename')
    ->update([
        'name' => 'omar',
        'email' => 'omar@gmail.com'
    ])
    ->where('id')->value('=', 88)
    ->save();