2011-11-14 7 views
3

propel 1.6とOracleプロシージャに問題があります。私はPDOに私の呼び出しをプロキシするためにPropelだからPDOの下に投稿します。PDOを使用したphpでのOracleの手順

基本的に、プロシージャはユーザー名とパスワードを取得し、 OKをチェックしてユーザーを返します。 そのため、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 columna 7: PLS-00306: 'SP_LOGIN'を呼び出す不良引数の数またはタイプ

私は間違っていますか?

ありがとうございます。

P.S:私はこの質問をPropelフォーラムで尋ね、私にPDOソリューションの検索を指示します。

答えて

3

私は問題が最初のパラメータだと思うでしょう。あなたはそれが文字列(PDO::PARAM_STR)であることをPDOに伝えますが、それは実際にはtypes.cursorTypeです。 refカーソルがサポートされていないことを示唆するuser comment in the PHP manualがあります。

不幸にも、PDO用のOracleドライバは実験的であり、(IMHO)は基本的に放棄されています。

+0

ありがとうございました。私は別のアプローチを得るでしょう。 –

3

checks that is OK and return the user

いいえ - プロトタイプによれば、カーソルを返します。 Cursors have no meaning outside PL/SQL。型をsys_refcursorに変更し、配列として$ result_arrを明示的に初期化すると、より良い機会を得ることが期待されます。

アルヴァロの答えとノンスカラーのパラメタタイプの不在を見ているかもしれないと思いますが。

関連する問題