Han pasado muchos años desde que creé el primero de 2 artículos en los que trataría de explicar de manera completa pero sencilla, cómo crear y ejecutar procedimientos almacenados en MySQL.
Gracias a los comentarios recibidos hasta el día de hoy, aún después de tanto tiempo inactivo este tópico, he decidido completarlo finalmente :) .
Para la creación de los códigos siguientes asumiremos tener una base de datos llamada "wpdemo" que posee una tabla llamada "wp_posts" con al menos dos campos: `post_excerpt`y `post_type`. Esta es en realidad una base de datos típica de WordPress, quienes conocen este framework para CMS, conocen de que se trata.
Si no tienes forma de probar en una base de datos de WordPress, basta con modificar los códigos fuente del ejemplo para darle sentido usando tus propias tablas y campos.
CREACIÓN DEL STORED PROCEDURE DE PRUEBA: (siguiendo las indicaciones del artículo anterior de esta serie)
DROP PROCEDURE `miSegundoProcedimientoAlmacenado` //
CREATE
DEFINER=`root`@`localhost`
PROCEDURE `miSegundoProcedimientoAlmacenado`(tipoPost varchar(20))
BEGIN
Set names utf8;
SELECT *
FROM `wp_posts`
WHERE trim(`post_excerpt`) != "" AND `post_type` = tipoPost;
END //
Llegado a este punto y si todo está ok, deberemos tener en la base de datos una "Rutina" o procedimiento almacenado llamado miSegundoProcedimientoAlmacenado que podremos verificar haciendo clic en el enlace "+Rutinas" en la parte inferior de explorador de las tablas en phpMyAdmin.
El procedimiento que hemos creado espera recibir un parámetro que internamente hemos llamado "tipoPost" que modificará las condiciones de la consulta que traerá los datos.
CALL miSegundoProcedimientoAlmacenado('post');
$sql="call miSegundoProcedimientoAlmacenado('post');";
$res=@mysql_query($sql, $cnx) or die('Error en el query: '.mysql_errno($cnx).' - '.mysql_error($cnx));
NOTA: hay diferentes maneras de conectar y ejecutar queries en php, usa la manera que más te parezca conveniente, para efectos de este emplo, he usado una manera sencilla aunque de la vieja escuela :)
Así pues que si quieres crear el ejemplo completo y funcionando, debes crear un archivo en php con el código siguiente (o pareceido según los valores de tu servidor, base de datos, tablas, etc.)
ejemploSP.php
<!DOCTYPE html>
<html>
<body>
<pre>
<?php
$cnx=mysql_connect('localhost','root','321321'); // remplaza los datos de acceso por tus propios datos
$db=mysql_select_db('wpdemo'); // remplaza el nombre de la base de datos por la tuya
$sql="call miSegundoProcedimientoAlmacenado('post');";
$res=@mysql_query($sql, $cnx) or die('Error en el query: '.mysql_errno($cnx).' - '.mysql_error($cnx));
$c=0;
while($reg=@mysql_fetch_assoc($res)){
// coloca aquí el código de lo que desees hacer con los resultados
echo "Reg $c:\r";
foreach($reg as $campo=>$valor){
echo "\t$campo = ".utf8_decode($valor)."\r";
}
$c++;
}
?>
</pre>
</html>
Y bueno ... listo: la salida debe ser simplemente algo como esto:
Reg 0: ID = 3 post_author = 1 post_date = 2012-05-08 04:27:54 post_date_gmt = 0000-00-00 00:00:00 post_content = post_title = Borrador automático post_excerpt = post_status = auto-draft comment_status = open ping_status = open post_password = post_name = to_ping = pinged = post_modified = 2012-05-08 04:27:54 post_modified_gmt = 0000-00-00 00:00:00 post_content_filtered = post_parent = 0 guid = http://localhost/wordpress/?p=3 menu_order = 0 post_type = post post_mime_type = comment_count = 0 Reg 1: ID = 1 post_author = 1 post_date = 2012-05-08 04:27:35 post_date_gmt = 2012-05-08 04:27:35 post_content = Bienvenido a WordPress. Esta es tu primera entrada. Edítala o bórrala, ¡y comienza a publicar!. post_title = ¡Hola mundo! post_excerpt = post_status = publish comment_status = open ping_status = open post_password = post_name = hola-mundo to_ping = pinged = post_modified = 2012-05-0804:27:35 post_modified_gmt = 2012-05-08 04:27:35 post_content_filtered = post_parent = 0 guid = http://localhost/wordpress/?p=1 menu_order = 0 post_type = post post_mime_type = comment_count = 1<< fin de la salida.

