1) Crear el PROCEDURE:
La forma más prolija de crear el procedure es mediante SQL con un CREATE PROCEDURE guardado en un .sql y
ejecutarlo en la base de datos correspondiente en el MySQL.(Si usamos PHPmyAdmin IMPORTAR, elijo el .sql)
En el link
"Ver ejemplos .sql" hay varios. En el código etá explicado cada parte. Es
importante cambiar el delimitador por $$ o // porque por defecto MySQL toma ; como delimitador y si tenemos
funciones dentro del procedure, el adm terminará el
CREATE PROCEDURE por la mitad. Luego del END
reponemos el delimitador a ; Es clave terminar la sentencia SQL con un ;final o fallará el CREATE.
si el procedure no pasa parámetros será
CREATE PROCEDURE nombre() típicanmente un SELECT sin
búsquedas, pero si hay que pasar parámetros estos van dentro del paréntesis, separados por comas primero las
palabras clave IN si es esntrada o OUT si es de salida y luego del nombre del parámetro (nombre a usar dentro del
PROCEDURE) separado por un espacio, el tipo y tamaño de variable.
(
Ver los tipos y sus límites).
2) Llamar al PROCEDURE:
Para llamar el procedure lo hacemos con un
CALL desde mysqli_query
($conector,"CALL listar_contactos"), donde CALL reemplaza la sentencia SQL, en este caso listar
contactos es el nombre del procedure creado en 1) y no tiene parámetros.
Si el procedure tiene parámetros, estos se pasan en el CALL por ejemplo
mysqli_query($conector,"CALL borrar_registro(35)") ,si el valor a pasar está en una variable PHP
sería
mysqli_query($conector,"CALL borrar_registro(".$cid.")").
Si los parámetros son varios los separamos con comas y respetamos el orden en que se declararon en el PROCEDURE.
por ej CREATE PROCEDURE test(id INT(10),detalle VARCHAR(500)) se lo llama con CALL(35,electricista).
1) Crear el PROCEDURE SIN PARÁMETROS:
DELIMITER // va a marcar el fin del procedure (sino es ;)
CREATE PROCEDURE listar_contactos() nombre y () indica que es sin parámetros
BEGIN comienzo del procedure
SELECT
id
,fecha
,detalle
FROM
nombre_de_tabla
ORDER BY
id DESC
LIMIT 50;
END//fin del procedure (sino es ;)
1) Crear el PROCEDURE CON PARÁMETROS:
DELIMITER // va a marcar el fin del procedure (sino es ;)
CREATE PROCEDURE test(valor_id INT(10),valor_detalle VARCHAR(500)) procedure con dos parámetros
BEGIN comienzo del procedure
INSERT INTO nombre_de_tabla(
id
,detalle
) VALUES (
valor_id
,valor_detalle
);
END//
2) Llamar al PROCEDURE y devolver los registros:
<?
if(conectar()){
$sqldevolucion = mysqli_query($conn,"CALL listar_contactos");
if (!mysqli_num_rows($sqldevolucion)) {
echo("Error, no se devuelven registros");
} else {
while ($registro = mysqli_fetch_array($sqldevolucion, MYSQL_ASSOC)){
"bloque que maneja los registros recibidos"
mysqli_free_result($sqldevolucion); //devuelvo recurso a memoria
mysqli_close($conn);
// cierro conexion
}
}else{
echo(mysqli_error($conn));
} //fin if conectar
?>