我創建了一個非常簡單的PostgreSQL的功能:PostgreSQL的PHP腳本命令返回NULL的JSON數據
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中\服務器\ 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腳本:
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手冊。我沒有考慮過什麼?
服務器正在運行PHP和Postgress啓用和測試。 – sMaN 2012-03-27 23:41:40
另外我已經嘗試了直接的SQL,而不是PHP中的函數調用,結果相同。 – sMaN 2012-03-27 23:45:51
在第二個打印語句之後'var_dump($ output)'的輸出是什麼? – Lars 2012-03-27 23:54:39