pg_select

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

pg_select 选择记录

说明

pg_select(
    PgSql\Connection $connection,
    string $table_name,
    array $conditions,
    int $flags = PGSQL_DML_EXEC,
    int $mode = PGSQL_ASSOC
): array|string|false

pg_select() 选择由 conditions 指定的记录,该记录具有 field=>value。对于成功的查询,它将返回一个数组,其中包含与 conditions 指定的条件匹配的所有记录和字段。

如果设置了 flags,则 pg_convert() 将使用指定的标志应用于 conditions

如果设置了 mode,则返回值将采用数组的形式,带有 PGSQL_NUM、带有 PGSQL_ASSOC 的关联数组(默认)或两者带有 PGSQL_BOTH

默认情况下,pg_select() 传递原始值。必须对值进行转义或指定 PGSQL_DML_ESCAPE 选项。PGSQL_DML_ESCAPE 引用并转义参数/标识符。因此,表/列名称将区分大小写。

请注意,转义或准备好的查询都无法保护 LIKE 查询、JSON、数组、正则表达式等。这些参数应根据其上下文进行处理。即转义/验证值。

参数

connection

一个 PgSql\Connection 实例。

table_name

要从中选择行的表的名称。

conditions

一个 array,其键是表 table_name 中的字段名,其值是行必须满足才能检索到的条件。

flags

任何数量的 PGSQL_CONV_FORCE_NULLPGSQL_DML_NO_CONVPGSQL_DML_ESCAPEPGSQL_DML_EXECPGSQL_DML_ASYNCPGSQL_DML_STRING 组合。如果 PGSQL_DML_STRINGflags 的一部分,则返回查询字符串。当设置 PGSQL_DML_NO_CONVPGSQL_DML_ESCAPE 时,它不会在内部调用 pg_convert()

mode

任何数量的 PGSQL_ASSOCPGSQL_NUMPGSQL_BOTH 如果设置 PGSQL_ASSOC,则返回值将是一个关联的 array,带有 PGSQL_NUM,则返回值将是一个 array,并且带有 PGSQL_BOTH,则返回值将是关联数组和数值索引数组。

返回值

如果通过 flags 传递 PGSQL_DML_STRING,则返回 string,否则在成功时返回 array,或者在失败时返回 false

变更日志

版本 说明
8.1.0 connection 参数现在需要一个 PgSql\Connection 实例;之前,需要一个 resource
7.1.0 添加了 mode 参数。

范例

示例 #1 pg_select() 示例

<?php
$db
= pg_connect('dbname=foo');
// 这在某种程度上是安全的,因为所有值都已转义。
// 但是 PostgreSQL 支持 JSON/数组。这些既不能通过转义也不能通过准备好的查询来保证安全。
$rec = pg_select($db, 'post_log', $_POST, PG_DML_ESCAPE);
if (
$rec) {
echo
"Records selected\n";
var_dump($rec);
} else {
echo
"User must have sent wrong inputs\n";
}
?>

参见

  • pg_convert() - 将关联数组值转换为适合 SQL 语句的形式

添加注释

用户贡献的注释 2 个注释

david dot tulloh at infaze dot com dot au
19 年前
有效选项为 PGSQL_DML_NO_CONV、PGSQL_DML_EXEC、PGSQL_DMP_ASYNC、PGSQL_DML_STRING(从源代码中提取)。

此函数不支持从多个表中选择。您可以通过设置 PGSQL_DML_NO_CONV 选项来解决此问题。这将防止在函数尝试转换条件数组时发生的错误。

我认为指出 table_name 字段并不安全也很重要,特别是对于 PGSQL_DML_NO_CONV 选项而言。

正如文档所述,arguements 数组字段是必需的。不那么清楚的是,数组必须实际包含一些值,您不能执行全选。

总之,此函数适用于非常小的基本查询子集。如果您需要执行更复杂的查询,最好使用 pg_query。
wietse at cj2 dot nl
18 年前
David 提到了您无法执行全选。
但是,执行此脚本时
<?php
$conn_string
= "dbname=mydb";
$db = pg_connect($conn_string);
$selectfields = array("imgid" => "");
$records = pg_select($db,"mmsfiles",$selectfields);
print_r($records);
?>
...我得到了这个结果
数组
(
[0] => 数组
(
[imgid] => 1
[file] => /home/wietse/public_html/mms/images/1.gif
[thumb] =>
)
[1] => 数组
(
[imgid] => 2
[file] => /home/wietse/public_html/mms/images/2.gif
[thumb] =>
)
[2] => 数组
(
[imgid] => 3
[file] => /home/wietse/public_html/mms/images/3.gif
[thumb] =>
)
[3] => 数组
(
[imgid] => 4
[file] => /home/wietse/public_html/mms/images/4.gif
[thumb] =>
)
)
To Top