我正在从pg_exec
切换到pg_query_param
当我使用普通查询时,一切正常但是,当我想在数据库上使用Postgres函数时,我遇到了问题。
这是我的实际代码:
$sql = "select accsmap.prep_download_files('".$dataType."','{".
$severity."}','{".
$year."}','{".
$region."}')";
$result = pg_exec($connect,$sql);
$connect
只是连接到它的数据库信息。
和我的新代码:
$result = pg_query_params($connect,"select accsmap.prep_download_files( ".
"$1" ." ,{ ". "$2" ." },{ ". "$3" ." },{ ". "$4" ." });",
array($dataType, $severity, $year, $region) );
我已经尝试了很多方法将$sql
var翻译成查询但总是在,
或{
}
这里是$sql
select accsmap.prep_download_files('for Accidents occuring in the following
Authorities','{1,2,3}','{2014,2016}','{E08000001,E06000028,E06000036}')
函数需要$severity
,$year
和$region
作为数组。
答案 0 :(得分:0)
问题在于您处理参数的方式。例如:
pg_query_params($dbconn, 'SELECT * FROM shops WHERE name = $1', array("Joe's Widgets"));
如果您看到该查询,则会有一个名为name
的列(字符数据类型),它应该是单引号name = 'name'
。但由于它位于pg_query_params中,因此您只需使用name = $1
'因为该函数会转义参数并添加引号。
因此,由于您使用postgreSQL数组,因此构造查询失败,因为您的参数构造不正确。如果您的变量$severity
与$severity="1,2,3"
类似,它会尝试将转义参数添加到引用中,返回如下内容:{'1,2,3'}
。
另一方面,如果其中一个参数是像你的情况一样的数组(int数组被传递给存储过程),它必须表示为数组中的一个集合,而不是php数组表示法。
我无法测试代码,但我相信正确的方法应该是:
$severity='{1,2,3}';
$year='{2014,2016}';
$region='{E08000001,E06000028,E06000036}';
$result = pg_query_params($connect,"select accsmap.prep_download_files($1, $2, $3, $4)",
array($dataType, $severity, $year, $region) );