【问题标题】:how to get returned value from stored function in PDO?如何从 PDO 中的存储函数中获取返回值?
【发布时间】:2011-08-27 03:20:45
【问题描述】:

我有这个代码:

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

【问题讨论】:

  • 您没有说您的 DBMS 是什么,但一般来说,过程应该返回值。也许您必须编写一个函数:-?
  • 你能告诉我如何从函数中获取返回值吗?
  • 在 MySQL 中,您将执行常规的 SELECT my_function() AS name 查询并从 name 读取值。你没有说你的 DBMS 是什么。
  • 我使用的是 PDO_Oracle 而不是 MYSQL,我该怎么办?
  • 假设 GET_USER() 是一个函数并添加了一个答案。

标签: php oracle function pdo


【解决方案1】:

如果您有一个返回标量的 Oracle 函数,您可以将其读取为任何其他值,例如:

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

... 并像在任何其他查询中一样从列 foo 中读取值。

【讨论】:

  • 我编辑了这个问题,现在我收到了这个错误:OCIStmtExecute: ORA-00904: "ISPPRO"."USERPKG"."GET_USER": invalid identifier
【解决方案2】:

你对包有执行权限吗?

用户 ISPPRO 应运行该命令

GRANT EXECUTE ON userpkg TO <your_user>;

一个简单的方法来检查你是否已经被授予执行这个包的权限是运行这个命令:

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

你应该得到一个以 EXECUTE 作为权限的行。

【讨论】:

  • 好吧,我不知道,因为我不是 DBA,我从 DBA 那里获得了我的连接信息和一些功能,以便将其应用到网站中,但我猜他做到了
  • 我会问。这很容易忘记,如果你不这样做,这正是你得到的错误信息。
  • 当我运行最后一个查询时,我收到此错误OCIStmtExecute: ORA-00911: invalid character,为什么??
  • 我已经编辑了答案,也许它不喜欢''。我打算通过 SQLPlus 运行该查询。只需选择权限列。
猜你喜欢
  • 2021-10-02
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
相关资源
最近更新 更多