Llamar a Procedimiento de una BD con parámetros IN-OUT desde PHP

Muchas veces tenemos la necesidad de usar un procedimiento almacenado en nuestra base de datos que contienen parámetros de entrada y salida para devolver valores y usarlo posteriormente.
En este ejemplo usaremos la extensión PDO de PHP para poder obtener el valor del OUT.
Supongamos que tenemos un Procedimiento creado:

  Procedure pr_prueba(in vparm_in varchar(10), out vparm_out varchar(30))
  Begin
    set vparm_out = 'Valor in: ' + vparm_in;
  End
Para este ejemplo nos conectaremos a nuestra base de datos por medio de ODBC mediante PDO:

   function fnConnDB() {
        try {
            $conn = new PDO('odbc:NOMBRE_ODBC', '', '',
                    array(
                        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
                    ));
            return $conn;
        } catch (PDOException $e) {
            exit($e->getMessage());
        } catch (Exception $e) {
            exit('Exception: '.$e->getMessage());
        }
    }
Ahora utilizando los métodos del PDO vamos a preparar nuestra consulta y a enlazar los parámetros del procedimiento.:

// Conn DB
$connDB = fnConnDB();

// resultado out del procedure
$sp_result = '';

// prepare procedure
$oPrepare = $connDB->prepare('CALL pr_prueba(?,?)');
$oPrepare->bindValue(1, 'Parametro de entrada', PDO::PARAM_STR); // vparm_in
$oPrepare->bindParam(2, $sp_result, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 30); // vparm_out

if ($oPrepare->execute()) {
  echo $sp_result;
} else {
  echo $connDB->errorInfo();
}
Con el método prepare invocamos nuestra consulta SQL en este caso usamos CALL podría ser también EXECUTE dependiendo de la base de datos que utilices, luego usando bindValue definimos como el parámetro número 1 y de tipo string, usando bindParam que es la que nos permite indicar que el parámetro sera de tipo OUT añadiendo PDO::PARAM_INPUT_OUTPUT al lado del tipo de dato en este caso string y el último parámetro es la cantidad de bytes a devolver.

Luego ejecutamos con ejecute para ejecutar nuestra consulta preparada donde en la variable $sp_result tenemos el dato devuelto por nuestro procedimiento almacenado con parámetro de tipo OUT.

Comentarios

Entradas más populares de este blog

Obtener el anterior y siguiente registro de una tabla MySQL con PHP