PHP

pg_query_params

pg_query_params

(PHP 5 >= 5.1.0, PHP 7)

pg_query_params - 向服务器提交一个命令并等待结果,并能够从SQL命令文本中单独传递参数。

描述

resource pg_query_params ([ resource $connection ], string $query , array $params )

向服务器提交一个命令并等待结果,并能够从SQL命令文本中单独传递参数。

pg_query_params()与pg_query()类似,但提供了额外的功能:参数值可以与命令字符串本身分开指定。pg_query_params()仅支持PostgreSQL 7.4或更高版本的连接; 使用早期版本时会失败。

如果使用参数,则它们在query字符串中被称为$ 1,$ 2等。相同的参数可能会在多次出现中出现一次query; 在这种情况下将使用相同的值。params指定参数的实际值。NULL此数组中的值意味着相应的参数是SQL NULL

pg_query()相比,pg_query_params()的主要优点是可以将参数值与query字符串分开,从而避免了繁琐且容易出错的引用和转义。与pg_query()不同,pg_query_params()允许给定字符串中最多一个SQL命令。(可以有分号,但不能超过一个非空命令。)

参数

connection

PostgreSQL数据库连接资源。如果connection不存在,则使用默认连接。默认连接是pg_connect()或pg_pconnect()所做的最后一个连接。

query

参数化的SQL语句。只能包含一个语句。(不允许使用以分号分隔的多个语句)。如果使用任何参数,则它们被称为$ 1,$ 2等。

用户提供的值应始终作为参数传递,而不是插入到查询字符串中,在那里它们形成可能的SQL注入攻击向量,并在处理包含引号的数据时引入错误。如果由于某种原因您无法使用参数,请确保插值正确转义。

params

用于替换原始准备的查询字符串中的$ 1,$ 2等占位符的参数值数组。数组中元素的数量必须与占位符的数量相匹配。

用于bytea字段的值不作为参数支持。改为使用pg_escape_bytea(),或使用大对象函数。

返回值

返回FALSE失败,成功时返回查询结果资源。

例子

Example #1 Using pg_query_params()

<?php // Connect to a database named "mary" $dbconn = pg_connect("dbname=mary" // Find all shops named Joe's Widgets.  Note that it is not necessary to // escape "Joe's Widgets" $result = pg_query_params($dbconn, 'SELECT * FROM shops WHERE name = $1', array("Joe's Widgets") // Compare against just using pg_query $str = pg_escape_string("Joe's Widgets" $result = pg_query($dbconn, "SELECT * FROM shops WHERE name = '{$str}'" ?>