llamar a un procedimiento almacenado de db2 desde zend

Recientemente comencé a jugar con procedimientos almacenados para db2 (hace un día) y logré crear un SP muy simple que funcionó bien cuando los probé en iAccess Navigator. Ahora estoy tratando de llamar al SP desde mi modelo, pero recibo errores y no estoy seguro de cómo obtener la variable de retorno. Aquí hay un código

aquí está mi 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; 

aquí está el código php

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

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

cualquier ayuda sera buena gracias

preguntado el 22 de mayo de 12 a las 16:05

¿Cuál es el mensaje de error? Creo que deberías usar $this->_db en lugar de $this->db -

este es el valor de db $this->db=Zend_Db_Table::getDefaultAdapter(); y esta es la excepción Zend_Db_Statement_Db2_Exception #256 -

1 Respuestas

Zend_Db puede tener un problema al manejar los procedimientos almacenados de DB2. Intentaré arreglar eso en ZF 2.0. Sin embargo, hoy puede ejecutar su ejemplo con éxito utilizando las funciones básicas del controlador ibm_db2. Probé esto en un sistema 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));
}

contestado el 22 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.