我在使用 propel 1.6 和 oracle 过程时遇到问题。我将它发布在 PDO 下,因为我是 Propel 只是为了代理我对 PDO 的调用。
基本上程序获取用户名和密码,检查是 确定并返回用户。 因此,它返回一个 types.cursorType。
sql是这样开始的。
CREATE OR REPLACE
PROCEDURE "SP_LOGIN" (R_CURSOR OUT types.cursorType, UserId IN
VARCHAR2, Password IN VARCHAR2)
我的 php 代码是:
$con = Propel::getConnection();
$sql = 'BEGIN SP_LOGIN(:CURSOR, :0, :1); END;';
$stmt = $con->prepare($sql);
$result_arr;
$stmt->bindParam(":CURSOR", $result_arr, PDO::PARAM_STR || PDO::PARAM_INPUT_OUTPUT);
$stmt->bindParam(":0", $username, PDO::PARAM_STR);
$stmt->bindParam(":1", $password, PDO::PARAM_STR);
$stmt->execute();
$result_arr = $stmt->fetchAll();
现在抛出一个异常类型: {PDOException} SQLSTATE [HY000]:一般错误:6550 OCIStmtExecute: ORA-06550: 第 1 行,第 7 列: PLS-00306:调用“SP_LOGIN”的错误参数的数量或类型
我做错了什么?
提前致谢。
P.S:我在 Propel 论坛上问了这个问题,他们指导我搜索 PDO 解决方案。
最佳答案
我怀疑问题出在第一个参数上。您告诉 PDO 它是一个字符串 (PDO::PARAM_STR
) 但它实际上是 types.cursorType
。有一个 user comment in the PHP manual这表明不支持引用游标。
不幸的是,PDO 的 Oracle 驱动程序是实验性的并且(恕我直言)基本上被放弃了。
关于php - 带有PDO的php中Oracle的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8121244/