0

アプリケーション pl/sql を開発するのは初めてで、パラメーターを php pl/sql に渡すのに苦労しています。関数 PL / SQL は既にデータベースに作成されており、次のクエリを実行すると、当然のパラメーターが返されます。

BEGIN 
  PIN_USERNAME := 'admin';
  PIN_PASSWD := '1';
  POUT_MESSAGE := NULL;

  RetVal := PKG_LOGIN.LOGIN_PORTAL ( PIN_USERNAME, PIN_PASSWD, POUT_MESSAGE );

  DBMS_OUTPUT.PUT_LINE('PIN_USERNAME='||PIN_USERNAME);
  DBMS_OUTPUT.PUT_LINE('PIN_PASSWD='||PIN_PASSWD);
  DBMS_OUTPUT.PUT_LINE('POUT_MESSAGE='||POUT_MESSAGE);
  COMMIT; 
END; 

今問題は、私はphpで同じことをすることができないということです. Googleの助けを借りて開発したphpのコードは次のとおりです。

include 'define.php';
require_once '../config/connectDB.php';
if(isset($_POST['user']) && isset($_POST['senha']))
{
    $utilizador = $_POST['user'];
    $senha = $_POST['senha'];
    $msg;

    //Connection database
    if(!ligacaoDB())
    {
        echo "Dont Connect";
    }

    $query = "begin :r := PKG_LOGIN.LOGIN_PORTAL (:1, :2, :3); commit; end;";    
    $result = oci_parse(ligacaoDB(), $query);     
    oci_bind_by_name($result, ":1", $utilizador);
    oci_bind_by_name($result, ':2', $senha);
    oci_bind_by_name($result, ':3', $msg);
    oci_bind_by_name($result, ':r', $r);
    $xpto = oci_execute($result);


    if($xpto == false)
    {
        $e = oci_error($result);
        print htmlentities($e['message']);

    }
    else
    {
        echo $msg . " | " . $r;
    }
    oci_free_statement($result);
    oci_close(ligacaoDB());
}

私が理解している plsql 関数から、このパラメーターは を受け取り、データベースがおよびで表されたメッセージとブール値を返すかどうかuserをチェックします。passwordmsgr

誰かが私を助けて、誰が間違っているのか説明してくれますか?

4

1 に答える 1

0

その理由を発見しましたか。ここで同じ問題を抱えている人のために、私は答えます:

http://docs.oracle.com/cd/E11882_01/appdev.112/e10646/oci03typ.htm#CEGIEEJI

次の 2 つの型は PL/SQL 内部のものであり、OCI によって値として返されることはありません。

ブール、SQLT_BOL

レコード、SQLT_REC

于 2013-02-20T14:37:47.603 に答える