2011-05-17 202 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