zheltikov / php-queryf
1.0.0
2022-02-28 18:47 UTC
Requires
- php: >=8.1
- ext-mysqli: *
- zheltikov/php-invariant: ^1.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-08-29 00:48:04 UTC
README
此类代表对MySQL数据库执行查询。
直接编码SQL值是错误的。库将尝试防止此类操作。where子句、插入等所有值都应通过以下编码方法进行参数化。这将使您的代码更加健壮和可靠,同时避免常见的安全问题。
使用很简单;使用特殊的printf-like标记构建查询,提供替换参数,然后将它们传递给数据库库。或者,您可以调用render*()方法之一,查看将要运行的SQL。
示例
use Zheltikov\Queryf\Query;
use Zheltikov\Queryf\QueryArgument;
use Zheltikov\Queryf\QueryArgumentType as Type;
$q = new Query(
'SELECT foo, bar FROM Table WHERE id = %d',
[
QueryArgument::fromDynamic(Type::Int, 17),
]
);
echo 'query: ' . $q->renderInsecure();
use Zheltikov\Queryf\Pair;
use Zheltikov\Queryf\Query;
use Zheltikov\Queryf\QueryArgument;
use Zheltikov\Queryf\QueryArgumentType as Type;
use Zheltikov\Queryf\_List;
$condition = QueryArgument::fromDynamic(Type::PairList);
$condition->getPairs()
->append(new Pair('id1', QueryArgument::newInt(7)))
->append(new Pair('id2', QueryArgument::newInt(14)));
$q = new Query(
'SELECT %LC FROM %T WHERE %W',
[
QueryArgument::fromDynamic(
Type::List,
new _List(
QueryArgument::newString('id1_type'),
QueryArgument::newString('data'),
),
),
QueryArgument::newString('assoc_info'),
$condition,
]
);
查询中的替换值应该是混合值。某些代码(如%W、%U等)期望的复合值也是包含数组或映射值的混合对象。
代码
%s
、%d
、%u
、%f
- 字符串、整数、无符号整数或浮点数;如果传入null,则为NULL
。%m
- 混合类型,转换为字符串/整数/浮点数/布尔值。null变为"NULL"
,否则抛出异常。%=s
、%=d
、%=u
、%=f
、%=m
- 与之前类似,但适合比较,因此"%s"
变为" = VALUE"
。null变为"IS NULL"
。%T
- 表名。用``
括起来。%C
- 类似于%T
,但对于列名。可选地提供两个/三个元组来定义限定列名或带有别名的限定列名。["table_name", "column_name"]
将变为"`table_name`.`column_name`"
,而["table_name", "column_name", "alias"]
将变为"`table_name`.`column_name` AS `alias`"
。%V
- VALUES样式行列表;期望一个列表的列表,每个列表长度相同。%Ls
、%Ld
、%Lu
、%Lf
、%Lm
- 由逗号分隔的字符串/整数/无符号整数/浮点数。%LC
- 由逗号分隔的列名列表。可选地作为两个/三个元组的列表提供,以定义限定列名或带有别名的限定列名。类似于%C
。%LO
、%LA
- 以key1=val1 OR/AND key2=val2
的形式呈现的键/值对(类似于%W
)。%U
、%W
- 分别适用于UPDATE和WHERE子句的键和值。%U
变为"`col1` = val1, `col2` = val2"
,而%W
变为"`col1` = val1 AND `col2` = val2"
。目前不支持无符号整数。%Q
- 文字字符串,邪恶邪恶。不要使用。%K
- SQL注释。将为您放置/*
和*/
。%%
- 文字%
字符。
有关更多详细信息,请参阅https://github.com/facebook/squangle。