Procedimientos Almacenados de MYSQL en PHP
filed in PHP on Aug.29, 2008
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:
- Instanciamos un objeto de tipo mysqli, esto es exlusivo para poder invocar a procedimientos almacenados de mysql.
- Después, y como te das cuenta, pasamos los parámetros de conexión con la Base de Datos.
- Luego hacemos uso de la funcion “sprintf” que intentara filtrar Inyecciones SQL, no es obligatorio usarlo pero si te lo recomiendo.
- 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.
- 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 !!
June 30th, 2010 on 5:30 am
Buy:Prozac.Buspar.Female Pink Viagra.Lasix.Female Cialis.Advair.Ventolin.Lipothin.Seroquel.Amoxicillin.Aricept.Zocor.Lipitor.Nymphomax.SleepWell.Zetia.Wellbutrin SR.Benicar.Cozaar.Acomplia….
July 22nd, 2010 on 3:42 am
Buy:Super Active ED Pack.Propecia.Tramadol.Viagra Soft Tabs.Viagra Super Force.Viagra Super Active+.Viagra.Viagra Professional.VPXL.Cialis Professional.Cialis Super Active+.Cialis.Soma.Levitra.Zithromax.Maxaman.Cialis Soft Tabs….