Я создал очень простую функцию PostgreSQL:
CREATE OR REPLACE FUNCTION betya_ref."func_GetBetTypes"()
RETURNS SETOF betya_ref."tbl_BET_TYPES" AS
$BODY$
SELECT * FROM betya_ref."tbl_BET_TYPES";
$BODY$
LANGUAGE 'sql' VOLATILE
COST 100
ROWS 20;
ALTER FUNCTION betya_ref."func_GetBetTypes"() OWNER TO postgres;
GRANT EXECUTE ON FUNCTION betya_ref."func_GetBetTypes"() TO public;
GRANT EXECUTE ON FUNCTION betya_ref."func_GetBetTypes"() TO postgres;
GRANT EXECUTE ON FUNCTION betya_ref."func_GetBetTypes"() TO dummy_users;
Я протестировал функцию в pgAdmin:
SELECT * FROM betya_ref."func_GetBetTypes"()
И он вернул правильные результаты:
ID NAME
1 WIN/LOSE
2 TRUE/FALSE"
3 TRUE/ALTERN TRUE"
4 RIGHT/WRONG"
Я создал скрипт PHP, сидящий на сервере Apache 2.2 в каталоге "Apache2.2 \ htdocs \ server \ betya_ref \ getBetTypes.php":
$dbconn = pg_connect("host=192.168.1.222 port=5432 dbname=betya user=dummy_user password=dummy_pass")
or die('Could not connect: ' . pg_last_error());
print('connect ... ' . $dbconn); //debugging
$result=pg_query($dbconn, 'SELECT * FROM betya_ref."func_GetBetTypes"()');
print(' *** result ... ' . $result); //debugging
while($e=pg_fetch_row($result))
$output[]=$e;
print(' *** output ... ' . $output . '... *** JSon ...'); //debugging
print(json_encode($output));
pg_free_result($result);
pg_close($dbconn);
Я вызываю скрипт PHP в браузере, используя этот URL:
http://localhost/server/betya_ref/getBetTypes.php
Что возвращает:
connect ... Resource id #2 *** result ... *** output ... ... *** JSon ...null
Другие (очень похожие) существующие сценарии, которые я запускаю, возвращают и корректно отображают данные JSon с той же строкой подключения и из того же каталога, но из другой схемы в той же базе данных. Эта новая схема имеет следующие разрешения;
GRANT ALL ON SCHEMA betya_ref TO postgres;
GRANT USAGE ON SCHEMA betya_ref TO betya_users;
Я думаю, что в скрипте PHP есть ошибка, но я не вижу, в чем я не прав, учитывая, что все так просто и прямо из руководства по PHP. Что я не учел?