zheltikov/php-queryf

1.0.0 2022-02-28 18:47 UTC

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