我在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.