我正試圖使存儲過程從用戶表中返回行。 我使用pg_函數從php中調用它:pg_prepare($conn, $id, 'SELECT user_read_all()')
和pg_execute($conn, $id, array())
。可悲的是我沒有PDO只爲MySQL。php-plpgsql調用存儲過程並獲取結果集
我試着用這個代碼,但我有多個問題:
CREATE OR REPLACE FUNCTION user_read_all()
RETURNS table(user_id INT, user_name VARCHAR, user_email VARCHAR)
AS
$BODY$
BEGIN
return query SELECT
user_id, user_name, user_email
FROM
user;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
通過pg_fetch,結果是array('test' => string(...))
而不是array(user_id => 1, user_name => '', user_email => '')
。我想切斷user_
前綴太多,但我得到這個語法錯誤:
CREATE OR REPLACE FUNCTION user_read_all()
RETURNS table(id INT, name VARCHAR, email VARCHAR)
AS
$BODY$
BEGIN
return query SELECT
user_id as id, user_name as name, user_email as email
FROM
user;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
;-(
是否有可能與PLPGSQL做到這一點
我的目標是使存儲過程的唯一接口,但我嚴重懷疑...與MySQL這是很容易的,但MySQL已經比pgsql的只有有限的功能...
CREATE PROCEDURE `user_read_all`()
BEGIN
SELECT `user_id` AS `id`, `user_name` AS `name`, `user_email` AS `email` FROM `user`
ORDER BY `user_id` DESC;
END;
所以,問題是如何修復存儲過程和PHP結果集?
溶液
CREATE FUNCTION test()
RETURNS TABLE (id INT, name VARCHAR, email VARCHAR)
AS
$BODY$
BEGIN
return QUERY SELECT
"user".user_id, "user".user_name, "user".user_email
FROM
"user";
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
和
SELECT * FROM test();
在PHP側
。
部分解決了這個問題,現在我用剛空值取有單排...字符串是空值連接起來......用戶表不爲空,當我使用它引用我得到了同樣的結果... – inf3rno
我必須使用「user」.user_id而不是簡單的user_id。現在它返回結果,但我想返回它作爲id,名稱,電子郵件,而不是作爲user_id,user_name,user_email ...我試圖爲每行添加「as」,但結果是語法錯誤... – inf3rno