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}'"
?>