Luego de una semana agotadora de trabajo, y ya que estoy mas relajado me anime a escribir acerca de cómo utilizar procedimientos almacenados de MYSQL 5 en PHP 5, esto trae grandes beneficios en varios aspectos como la reutilización de codigo, mejor orden al momento de estudiar y entender el sistema(modularidad) y muchas cosas mas que mejor no sigo diciendo sino te aburrire jejeje.

En el siguiente ejemplo te muestro como llamar a un procedimiento almacenado para traer datos y mostrarlos en pantalla:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php 
/******** CONSULTA CON PROCEDIMIENTO ALMACENADO **********/
$db = new mysqli(); //mysqli exclusivo para usar procedimientos almacenados
$db_result = $db->connect ("localhost", "root", "","db_productos");
$sql=sprintf("call usp_ListarProductos('%s',%d);",'Leche',1); 
/*sprintf intenta filtrar el SQL Injection, es conveniente utilizarlo, 
%s indica que se le pasara una cadena y 
%d indica que se le pasara un numero entero*/
 
$result = $db->query($sql);
if (mysqli_errno($db)) printf("mySQL error %s\n", $db->error); //si es que hubo error se muestra mensaje
$db->close(); //cerramos la conexion
 
if($result->num_rows>0){
	while($row = mysqli_fetch_assoc($result)){ //recorriendo registro x registro
		echo $row["producto_id"].' '.$row["nombre"].' '.$row["precio"].'<br>';
	}
}else{
	echo 'No hay registros';
}
$result->free; //liberando memoria
?>

Explicación:

  1. Instanciamos un objeto de tipo mysqli, esto es exlusivo para poder invocar a procedimientos almacenados de mysql.
  2. Después, y como te das cuenta, pasamos los parámetros de conexión con la Base de Datos.
  3. Luego hacemos uso de la funcion “sprintf” que intentara filtrar Inyecciones SQL, no es obligatorio usarlo pero si te lo recomiendo.
  4. Posteriormente pasamos la variable $sql al metodo “query” para que se ejecute el procedimiento almacenado y hacemos un if preguntando si es que hubo un error luego cerramos la conexion.
  5. Haciendo uso de $result->num_rows>0 verificamos si el procedimiento devolvió registros, si es asi, entonces recorremos uno a uno y lo vamos pintando en pantalla, caso contrario mostramos un mensaje.

A continuación te muestro como llamar a un procedimiento almacenado pero para hacer una operación Insert o Update (para los 2 casos es similar).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
/******** INSERT CON PROCEDIMIENTO ALMACENADO **********/
$db = new mysqli(); //mysqli exclusivo para usar procedimientos almacenados
$db_result = $db->connect ("localhost", "root", "","db_productos");
$sql=sprintf("call usp_InsertarProductos('%s',%f);",'Leche descremada',15.30); 
/*sprintf intenta filtrar el SQL Injection, es conveniente utilizarlo, 
%s indica que se le pasara una cadena y 
%f indica que se le pasara un numero con decimales*/
 
$result = $db->query($sql);
if (mysqli_errno($db)) printf("mySQL error %s\n", $db->error); //si es que hubo error se muestra mensaje
 
if($db->affected_rows!=-1){ //si se ejecuto correctamente el procedimiento almacenado
	echo 'Se inserto el registro';
}else{
	echo 'No se pudo insertar el registro';
}
$result->free; //liberando memoria
$db->close(); //cerramos la conexion
?>

La unica diferencia importante es que usamos $db->affected_rows!=-1 para verificar si se ejecuto correctamente el procedimiento.

Si deseas puedes descargar el ejemplo completo desde aquí.

Suerte Tigre !!