Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

consatan/sqlbuilder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

5 Commits

Repository files navigation

SQL Builder

License Php Version Build Status Coverage Status

让复杂 SQL 不再复杂

安装

composer require consatan/sqlbuilder

起因

虽然数据库操作类都支持多表关联查询,也支持纯 SQL 查询,但你是否遇到过复杂查询,又有多个判断条件的情况?

这个工具要解决的就是这类问题,如下(具体见 单元测试样例)

<?php
use Consatan\SQLBuilder\Bind;
use Consatan\SQLBuilder\Builder;
$sql = <<<SQL
SQL;
$builder = new Builder();
try {
 $stmt = $builder
 ->build('')
 ->build('')
 ->build('')
 ->build('')
 ->run($dbh, $sql);
 foreach ($stmt->fetchAll(\PDO::FETCH_ASSOC) as $row) {
 // do something...
 }
} catch (\InvalidArgumentException $e) {
 // 参数错误才会抛出这个异常,理论上这个异常应该在测试阶段发现
} catch (\PDOException $e) {
 // PDO 查询异常,必须捕获
}

SQL-markup 规则

TODO

  • useNamedPlaceholder = false 支持
  • 根据 driver_options 判断是否支持 named placeholders

协议

BSD-3-Clause

API 文档

[TOC]

Builder 类

Builder SQL 语句。

类概要

Consatan\SQLBuilder\Builder {
 public __construct(array $config = [])]
 public build(string $label, mixed $bind = [], string $sql = ''): Builder
 public prepare(string $sql, mixed $bind = [], array $driverOptions = []): array
 public run(\PDO $dbh, string $sql, mixed $bind = [], array $driverOptions = []): \PDOStatement
}

Builder::__construct

实例化 Builder 类

public Builder::__construct(array $config = [])
参数说明

$config 支持以下实例化选项

  • allowBuildOverride: 是否允许覆盖 build,默认 true
  • useNamedPlaceholder: 在 prepare SQL 时使用命名占位符,默认 true。某些 PDO 驱动只支持问号形式的占位符,这种情况下需要手动配置该参数。该参数当前未实现
  • detectBindValueType: 根据 PHP 变量数据类型检测对应的 SQL 绑定参数类型,默认 false
返回值

成功返回 Consatan\SQLBuilder\Builder 实例。

使用示例

Builder::build

build 一个 SQL-markup。

public Builder::build(string $label, mixed $bind = [], string $sql = ''): Builder
参数说明

$label SQL-markup 标签,允许的标签格式为 ``

$bind 绑定参数列表

$sql 传递该参数将覆盖 SQL-markup 中的内置 SQL 语句

返回值

返回当前 Consatan\SQLBuilder\Builder 实例,便于链式调用。

错误/异常

当参数格式错误时抛出 \InvalidArgumentException 异常。

使用示例

Builder::prepare

对 builder 的 SQL 进行 prepare 化操作。

public Builder::prepare(string $sql, mixed $bind = [], array $driverOptions = []): array
参数说明

$sql 要执行的 SQL 语句。

$bind 绑定参数列表。

$driverOptions 参见 PDO::prepare$driver_options 参数说明。

返回值

返回格式如下的数组

错误/异常

当参数错误时抛出 \InvalidArgumentException 异常。

使用示例

Builder::run

执行 builder 的 SQL。

public Builder::run(\PDO $dbh, string $sql, mixed $bind = [], array $driverOptions = []): \PDOStatement
参数说明

$dbh PDO 实例。

$sql 见 Builder::prepare 的 $sql 参数说明。

$bind 见 Builder::prepare 的 $bind 参数说明。

$driverOptions 见 Builder::prepare 的 $driverOptions 参数说明。

返回值

成功返回 \PDOStatement 实例。

错误/异常

当参数错误时抛出 \InvalidArgumentException 异常。

使用示例

Bind 类

PDO 绑定参数辅助类。

类概要

Consatan\SQLBuilder\Bind {
 public getValues(): array
 final public static int(mixed ...$bind): Bind
 final public static str(mixed ...$bind): Bind
 final public static null(mixed $val = null, mixed ...$bind): Bind
 final public static bool(mixed ...$bind): Bind
 final public static lob(mixed ...$bind): Bind
 final public static assertBindValue(mixed $value): void
 final public static assertArrayBindValue(array $array): void
 final public static assertNamedPlaceholder(string $placeholder): void
 final public static assertPDOParamType(int $type): void
}

Bind::getValues

获取格式化后的 PDO 参数绑定数据

public Bind::getValues(): array
返回值

格式化后的 PDO 参数绑定数据,格式如下

使用示例

Bind::int

对给定数据进行 PDO int 数据类型绑定。

final public static Bind::int(mixed ...$bind): Bind
参数说明

...$bind

返回值

成功返回 Consatan\SQLBuilder\Bind 实例。

错误\异常

绑定参数值无效抛出 \InvalidArgumentException 异常。

使用示例

Bind::str

对给定数据进行 PDO str 数据类型绑定。

final public static Bind::str(mixed ...$bind): Bind

见 Bind::int 说明。

Bind::null

对给定数据进行 PDO null 数据类型绑定。

final public static Bind::null(mixed $val = null, mixed ...$bind): Bind
参数说明

$val

其余见 Bind::int 说明。

Bind::bool

对给定数据进行 PDO bool 数据类型绑定。

final public static Bind::bool(mixed ...$bind): Bind

见 Bind::int 说明。

Bind::lob

对给定数据进行 PDO lob 数据类型绑定。

final public static Bind::lob(mixed ...$bind): Bind

见 Bind::int 说明。

Bind::assertBindValue

断言绑定参数是否合法。

final public static Bind::assertBindValue(mixed $bind): void
参数说明

$bind 要断言的绑定参数,必须是 scalar 或 null 数据类型。

错误/异常

绑定参数不合法抛出 \InvalidArgumentException 异常。

使用示例

Bind::assertArrayBindValue

Array 版的 Bind::assertBindValue。

final public static Bind::assertArrayBindValue(array $array): void
参数说明

$array 要断言的绑定参数数组,数组元素必须是 scalar 或 null 数据类型。

错误/异常

绑定参数不合法抛出 \InvalidArgumentException 异常。

使用示例

Bind::assertNamedPlaceholder

断言命名占位符格式。

final public static Bind::assertNamedPlaceholder(string $placeholder): void
参数说明

$placeholder 要断言的命名占位符变量。命名占位符必须符合以下格式。

错误/异常

命名占位符不合法抛出 \InvalidArgumentException 异常。

使用示例

Bind::assertPDOParamType

断言 PDO 参数绑定数据类型。

final public static Bind::assertPDOParamType(int $type): void
参数说明

$type 要断言的 PDO 参数绑定数据类型,详见

错误/异常

$type 为未定义的 PDO 参数绑定数据类型时抛出 \InvalidArgumentException 异常。

使用示例

About

让复杂 SQL 不再复杂

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /