2

私は最近、db2 のストアド プロシージャを使い始め (1 日前)、iAccess Navigator でテストしたときに問題なく動作する非常に単純な SP を作成することができました。今、モデルから SP を呼び出そうとしていますが、エラーが返され、戻り変数を取得する方法がわかりません。ここにいくつかのコードがあります

これが私のSPです

drop procedure schema.test_ac ;
CREATE PROCEDURE schema.test_ac (IN a int, in b int, out c int)
LANGUAGE SQL
BEGIN
    set c=b+a;
END; 

ここにphpコードがあります

public function storePro(){
    $queryStr = "call test_ac (1,1,?)";

        $stmt = $this->db->query($queryStr);
        print_r($stmt->fetchAll());
}

どんな助けでもいいでしょうありがとう

4

1 に答える 1

2

Zend_Db では、DB2 ストアド プロシージャを処理する際に問題が発生する場合があります。ZF 2.0で修正しようと思います。ただし、今日では、基本の ibm_db2 ドライバー関数を使用してサンプルを正常に実行できます。これを v7.1 IBM i システムでテストしました。

// get actual db2 resource from ZF object
$dbConn = $this->db->getConnection();

if (!$dbConn) {
    die("could not get connection");
}

$queryStr = "call test_ac (?, ?, ?)";

$stmt = db2_prepare($dbConn, $queryStr);

if (!$stmt) {
    die ("Could not prepare statement. " . db2_stmt_error());
}

// set values to be bound. All three variables must be created.
$in1 = 1;
$in2 = 2;
$out1 = 0; // irrelevant but must provide

db2_bind_param($stmt, 1, "in1", DB2_PARAM_IN);
db2_bind_param($stmt, 2, "in2", DB2_PARAM_IN);
db2_bind_param($stmt, 3, "out1", DB2_PARAM_OUT);

$result = db2_execute($stmt);

if ($result) {
    // success!
    echo "value of output var: $out1";

} else {

    die("Execute failed: " . db2_stmt_error($stmt));
}
于 2012-05-22T18:12:47.877 に答える