postgres存储过程json错误

时间:2014-09-30 14:27:49

标签: php sql json postgresql stored-procedures

所以我正在创建一个我想要显示json字符串的应用程序(现在)。我用php(它工作)调用存储过程,该存储过程返回一行。

问题是返回的记录/行必须是json字符串。为此,我使用php:

$verbinding = pg_connect("host=**** port=**** dbname=*** user=******* password=****");
$query = 'SELECT to_json(function_name(parameter))';
$contests = pg_query($query);

if(json_decode($contests)) {
    echo 'succeeded';
} else {
    echo 'failed';
}

现在我的代码总是返回失败,我不知道为什么或如何解决这个问题。提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

此:

$contests = pg_query($query);
json_decode($contests)

是荒谬的。如果用打印语句替换json_decode,您将看到原因。

the manual pg_query的返回值为:

  

成功时的查询结果资源或失败时为FALSE。

如果您查看示例,您会看到一些基本用法,您将看到需要使用pg_fetch_row或类似内容来访问结果。

这是有道理的,因为查询结果可以有多行,每行有多个值。

"另见"上面的文档链接部分指出了您需要的功能。

在这种情况下,我建议使用pg_fetch_result(参见侧栏)。

当你处理它时,一些基本的错误处理是明智的。

我还强烈怀疑你未能使用绑定参数,让自己暴露于SQL injectionUse pg_query_params

这是您的起点。它未经测试,我并不真正使用PHP,但它应该让你知道你出错的地方:

$query = 'SELECT to_json(function_name($1))';
$contests = pg_query_params($query, array($somevariable))
              or die(pg_last_error());

$json = pg_fetch_result($contests, 0, 0);
if(json_decode($json)) {
    # ....
}

现在,严肃地说,去阅读手册