DB上的pg_query_params和pg函数

时间:2018-01-03 11:57:45

标签: php postgresql

我正在从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作为数组。

1 个答案:

答案 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) );