You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi all. My name is Saulo, and I´m a total newbie in Leaf.
So, as the title said: "Using Store Procedures". Guys, I´m following this great tutorial: https://www.youtube.com/watch?v=Z5YQc7FhXyU&t=1705s&ab_channel=Develoteca
But, as you can see use "direct" consult into the tables (that´s fine, just my "problem / request" it´s how to use them direct into the Store procedures) I need to consume the Store procedures in my DB(*).
So, Is there an example tutorial in order to build an API using Leaf and Store procedures?.
I think, this could be really usefull for Devs like my self (we use SP in order to "improve" the consult and all the T-SQL).
This is an example of my PHP code in order to call an SP (micro service API with native PHP)
Example using an consult by ID:
`<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Origin, X-Requestes-Whit, Content-Type, Accept');
header ('Access-Control-Allow-Methods: GET');
header('Content-Type: application/json');
$json = file_get_contents('php:https://input');
$params = json_decode($json);
try {
require_once ('../../ConexionDB\conexionMySQL.php'); //Se llama el archivo donde está la conexión a la BD
$mysql = new connection(); // Se crea una conexión en la constante $mysql
$conexion = $mysql -> get_conection(); //Se pasa la cadena de conexión a la constante $conexion
$Id_paciente=$_GET["Id"];
$Id_pac=(int)$Id_paciente;
if($Id_pac==null or $Id_pac=="" or $Id_pac==0)
{
$resultado="No se ejecutó la consulta, porque el ID del paciente está nulo.";
echo $cad=json_encode($resultado);
}
else
{
$sql= ("CALL SP_ExampleXIDpaciente('$Id_pac')");
$result= mysqli_query($conexion, $sql);
if ($result->num_rows >0){
$conexion -> close(); // Se cierra la conexión a la BD
$vec=[];
while($reg=mysqli_fetch_array($result)){
$vec[]=$reg;
}
$cad = json_encode($vec);
echo $cad;
}
else{
$conexion -> close(); // Se cierra la conexión a la BD
$resultado2="No hay resultados en la consulta, para el paciente.";
echo $cad=json_encode($resultado2);
}
}
} catch (Exception $ex) { //Entra a la excepción, pero, cierra el estatuto y la conexión a la BD
$conexion -> close(); // Se cierra la conexión a la BD
echo $ex->getMessage();
}
?>`
Now insert:
`<?php
header ('Access-Control-Allow-Origin: *');
header ('Access-Control-Allow-Headers: access');
header ('Access-Control-Allow-Methods: GET,POST');
header ('Access-Control-Allow-Headers: Origin, X-Requestes-Whit, Content-Type, Accept');
header ('Content-Type: application/json');
$json = file_get_contents('php:https://input');
$params = json_decode($json);
try {
require_once ('../../ConexionDB\conexionMySQL.php'); //Se llama el archivo donde está la conexión a la BD
$mysql = new connection(); // Se crea una conexión en la constante $mysql
$conexion = $mysql -> get_conection(); //Se pasa la cadena de conexión a la constante $conexion
$mysql2 = new connection();
$conexion2= $mysql2 -> get_conection();
$mysql3 = new connection();
$conexion3= $mysql3 -> get_conection();
$mysql4 = new connection();
$conexion4= $mysql4 -> get_conection();
//Se usa $_POST, porque en el method del formulario es POST
// porlo tanto los values de cad aobjeto es como se tienen que pasar
//como se muestra abajo
//$MAC = exec('getmac'); Aquí se saca la MAC, pero, el antivirus lo toma como ataque.
// Storing 'getmac' value in $MAC
//$MAC = strtok($MAC, ' ');
$ip = empty($_SERVER["REMOTE_ADDR"]) ? "Desconocida" : $_SERVER["REMOTE_ADDR"];
$MAC ="00:00:00:00";
$Nom_tabla = "enfermedades";
date_default_timezone_set("America/Mexico_City");
$fechaActual = date("Y-m-d H:i:s");
$Accion = "Insertar";
$Nombreenf=$params->Nombre_enf;
$Descrip=$params->Descrip;
$Id_us=$params->Id_usuario;
$Id_user=(int)$Id_us;
$resultado = null;
$Nom=$Nombreenf;
$Des=$Descrip;
$De=$Des;
///--Validar aquí si viene vacios los datos de la interfaz, si
//--Si vienen vacíos insertar, si no, regresar mensaje de que están
//--vaciíos los datos
if ($Nom==null and $Des==null or $Nom=="" and $Des==""){ //$Nom=="" and $Des==""
$response->resultado ="No insertado, porque están nulos los datos";
echo $cad=json_encode($resultado);
}
else{
$sql ="CALL SP_Validarsiexiste_enfermedad ('$Nom', '$Des')"; // Se pasa el string de conexión
$result = mysqli_query($conexion, $sql);
if ($result->num_rows > 0){ //Si existe no lo inserta
$conexion -> close(); // Se cierra la conexión a la BD
$resultado="No insertado, porque ya existe";
echo $cad=json_encode($resultado);
}
else{ // De lo contrario, lo inserta
$datos = array ("Nombre_enf"=> $Nombreenf, "Descrip" => $Descrip);
$statemen = $conexion2 ->prepare("CALL SP_insertar_enfermedades(?, ?)"); // Se pasa el string de conexión
//Se hace el llamado al SP con los parámetros que espera los ? son cada uno de los parámetros
//Se pone el tipo de campos que son por cada parámetro que se para al SP
$statemen -> bind_param("ss", $datos["Nombre_enf"], $datos["Descrip"]);
$statemen-> execute();//Se ejecuta toda la consulta
$statemen -> close(); // Se cierra el estatuto
$conexion2 -> close(); // Se cierra la conexión a la BD
//Se consulta y se trae el ID para insertarlo en la bitácora. No se usa el SP juntos porque tiene conflictos debido a la exportación
$sqlconsulta ="CALL SP_Consulta_ID_Insertada_Enfermedad('$Nom', '$De')"; // Se pasa el string de conexión
$result2 = mysqli_query($conexion3, $sqlconsulta);
while($ver=mysqli_fetch_row($result2)):
$Idpaso = $ver[0];
endwhile;
// $Id_usuario_reg=1;
$conexion3 -> close();
$idlast = (int)$Idpaso;
//--
///----Insertar bitacora
$datos2 = array ("Nom_tabla"=> $Nom_tabla,
"Fecha_transac"=> $fechaActual,"IP" => $ip, "MAC" => $MAC,
"Id_usuario_reg"=> $Id_user, "Tipo_accion"=>$Accion,
"ide"=>$idlast);
$statemen2 = $conexion4 ->prepare("CALL SP_Insertar_bitacora(?, ?, ?, ?, ?, ?, ?)"); // Se pasa el string de conexión y los parámetros que espera el SP
//Se hace el llamado al SP con los parámetros que espera los ? son cada uno de los parámetros
//Se pone el tipo de campos que son por cada parámetro que se para al SP
$statemen2 -> bind_param("ssssisi", $datos2["Nom_tabla"],$datos2["Fecha_transac"],$datos2["IP"],
$datos2["MAC"],$datos2["Id_usuario_reg"],$datos2["Tipo_accion"], $datos2["ide"]);
$statemen2 -> execute(); //Se ejecuta toda la consulta
$statemen2 -> close(); // Se cierra el estatuto
$conexion4 -> close(); // Se cierra la conexión a la BD
///---
$resu="Registro guardado";
echo $cad=json_encode($resu);
}
}
} catch (Exception $ex) { //Entra a la excepción, pero, cierra el estatuto y la conexión a la BD
//$statemen -> close(); // Se cierra el estatuto
$conexion -> close(); // Se cierra la conexión a la BD
echo $ex->getMessage();
}
?>`
As you can see in this MIS I builded (Using ReactJs as FE and BE PHP) I just call the "action" in the FE and the BE execute ALL using SP´s. So, as I said before. Is there a way in MVC or something in Leaf to use my SP´s in the DB and make less code using Leaf?.
Again, I´m a total newbie using frameworks, but, I want to learn and use leaf... And, I don´t know... Maybe some Dev could make an improvement into Leaf in order to use the SP´s.
Regards to all and thank you for read my post.
(*) As you can see, I make some actions before try to insert (same think when I update a egister at the table), so, that´s the reason I use the SP and also, insert and then check some ID´s and come back with some result sets.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
Hi all. My name is Saulo, and I´m a total newbie in Leaf.
try {
require_once ('../../ConexionDB\conexionMySQL.php'); //Se llama el archivo donde está la conexión a la BD
} catch (Exception $ex) { //Entra a la excepción, pero, cierra el estatuto y la conexión a la BD
$conexion -> close(); // Se cierra la conexión a la BD
echo $ex->getMessage();
}
?>`
?>`
Regards to all and thank you for read my post.
(*) As you can see, I make some actions before try to insert (same think when I update a egister at the table), so, that´s the reason I use the SP and also, insert and then check some ID´s and come back with some result sets.
Beta Was this translation helpful? Give feedback.
All reactions