PHP调用PostgreSQL函数 – 类型问题?

我在PostgreSQL / plpgsql中有一个带有以下签名的函数:

CREATE OR REPLACE FUNCTION user_login(TEXT, TEXT) RETURNS SETOF _get_session AS $$... $$

_get_session是一个视图.从phpPgAdmin调用它时该函数工作正常,但是我从PHP调用它我得到以下错误:

Warning: pg_query() [function.pg-query]: Query failed: ERROR: type
“session_ids” does not exist CONTEXT: compile of PL/pgSQL function
“user_login” near line 2 in /home/sites/blah.com/index.php on line 69

该函数的DECLARE部分包含以下变量:

oldSessionId session_ids := $1;
newSessionId session_ids := $2;

域session_ids存在,并且当从同一脚本调用时,使用相同域的其他函数也可以工作. PHP如下:

$query = "SELECT * FROM $dbschema.user_login('$session_old'::TEXT, '$session'::TEXT)";
$result = pg_query($login, $query);

我在调用函数时也使用:: session_ids代替:: TEXT尝试了这个,但是我收到了同样的错误.

帮助:o(

最佳答案 只需简化代码:

$query = "SELECT * FROM $dbschema.user_login($1, $2)";
$result = pg_query_params($login, $query, array($session_old, $session));

现在你可以安全地从SQL注入.

但是,您的函数仍然是错误的,没有数据类型“session_ids”.我想你想在DECLARE部分使用TEXT.

点赞