2011-05-17 246 views
2

我有這樣的代碼:如何從PDO中的存儲函數獲取返回值?

include("connect.php"); 
// Call database function 
$p = 100; 
$sth = $conn->prepare('SELECT ISPPRO.USERPKG.GET_USER(:bind1, :bind3) AS v FROM DUAL'); 
$sth->bindParam(":bind1", $p, PDO::PARAM_INT); 
$sth->bindParam(":bind3", $p, PDO::PARAM_INT); 
$sth->execute(); 
$result = $sth->fetch(PDO::FETCH_ASSOC); 
print_r($result); 
echo "<br><pre>"; 
print_r($conn->errorInfo()); 
echo "</pre>"; 

ISPPRO.USERPKG.GET_USER返回1或0;

我怎麼能得到它?

在此先感謝。

編輯:

我改變了上面的代碼,我得到這個錯誤:

OCIStmtExecute: ORA-00904: "ISPPRO"."USERPKG"."GET_USER": invalid identifier 
+0

你不會說你的數據庫管理系統是什麼,但一般來說,程序應該*不*返回值。也許你必須寫一個函數: - ? – 2011-05-17 10:40:58

+0

你能告訴我如何從函數獲取返回值嗎? – Saleh 2011-05-17 10:45:00

+1

在MySQL中,您會定期執行'SELECT my_function()AS name'查詢並從'name'中讀取值。你不會說你的DBMS是什麼。 – 2011-05-17 10:56:48

回答

1

您是否擁有包裹執行權限?

用戶ISPPRO需要運行這個命令

GRANT EXECUTE ON userpkg TO <your_user>; 

一個簡單的方法來檢查,如果你已經被授予執行這個包是運行此命令:

SELECT privilege 
    FROM all_tab_privs 
WHERE table_schema = 'ISPPRO' 
    AND table_name = 'USERPKG'; 

你應該得到一個排以EXECUTE作爲特權。

+0

嗯,我不知道,因爲我不是DBA,我將我的連接信息和DBA的一些功能應用到網站中,但我想他是這麼做的 – Saleh 2011-05-17 14:03:19

+1

我會問。忘記是一件容易的事情,如果你不這樣做,這正是你得到的錯誤信息。 – DCookie 2011-05-17 14:32:37

+0

當我運行最後一個查詢,我得到這個錯誤'OCIStmtExecute:ORA-00911:無效字符',爲什麼? – Saleh 2011-05-17 15:51:01

2

如果你有一個返回你讀它像任何其他值標量,例如一個Oracle函數:

SELECT ISPPRO.USERPKG.GET_USER(:user, :pass) AS foo 
FROM DUAL 

...並像在任何其他查詢中那樣從列foo讀取值。

+0

我編輯了這個問題,現在我得到這個錯誤:'OCIStmtExecute:ORA-00904:「ISPPRO」。「USERPKG」。「GET_USER」:無效標識符 – Saleh 2011-05-17 12:49:12

相關問題