Foros del Web » Programando para Internet » PHP »

ejecutar mas de un procedimiento almacenado mysql

Estas en el tema de ejecutar mas de un procedimiento almacenado mysql en el foro de PHP en Foros del Web. Buenas, tengo un problema cuando quiero ejecutar dos procedimientos almacenados de mysql distintos. el codigo que utilizo es el siguiente: Código PHP: $buscarmailquery  =  "call BUSCARMAIL('" ...
  #1 (permalink)  
Antiguo 14/12/2011, 20:57
 
Fecha de Ingreso: mayo-2009
Mensajes: 66
Antigüedad: 14 años, 11 meses
Puntos: 0
ejecutar mas de un procedimiento almacenado mysql

Buenas, tengo un problema cuando quiero ejecutar dos procedimientos almacenados de mysql distintos.

el codigo que utilizo es el siguiente:

Código PHP:

$buscarmailquery 
"call BUSCARMAIL('".$mail."');";
$buscarmail mysqli_query($conexion$buscarmailquery);

$registroquery "call CREARUSUARIO('".$nombre."', '".$apellido."', '".$mail."', '".$pass."');";
$registro mysqli_query$conexion$registroquery); 
Ambos procedimientos funcionan perfectamente (los probe desde el mysql directamente). Pero el problema, es que cuando los invoco desde php, funciona el primero, pero no el segundo.

Si comento el primero, el segundo funciona perfectamente.

Es decir: p1 y p2 son los procedimientos almacenados mysql. si ejecuto p1 no se ejecuta p2. si comento la llamada a p1, p2 se ejecuta correctamente.

Lo que yo necesito es que funcionen ambos. Alguna idea de que podrá ser?
  #2 (permalink)  
Antiguo 14/12/2011, 22:29
Avatar de efex_  
Fecha de Ingreso: noviembre-2011
Mensajes: 17
Antigüedad: 12 años, 5 meses
Puntos: 4
Respuesta: ejecutar mas de un procedimiento almacenado mysql

Hola, prueba utilizando UNION, se utiliza para enviar varias consultas.

Código PHP:
Ver original
  1. <?php
  2. $query = "call BUSCARMAIL('".$mail."'); UNION call CREARUSUARIO('".$nombre."', '".$apellido."', '".$mail."', '".$pass."');";
  3.  
  4. // Para que muestre por pantalla el error mysql.
  5. $numresults=mysql_query($query);
  6. if (!$numresults){
  7. }
  8. ?>
  #3 (permalink)  
Antiguo 15/12/2011, 05:50
 
Fecha de Ingreso: mayo-2009
Mensajes: 66
Antigüedad: 14 años, 11 meses
Puntos: 0
Busqueda Respuesta: ejecutar mas de un procedimiento almacenado mysql

Hola efex_

Es una buena idea la que me decis, pero no puedo aplicarla en este caso. Te explico por que:

en el codigo, llegado los atributos nombre, apellido, mail y pass, debo hacer las verificaciones correspondientes para validar el tipo de entrada (cantidad de caracteres, caracteres especiales, etc.).

Luego, si todo está bien, procedo a verificar si existe el mail ingresado (el mail es pk en la tabla usuarios), por lo que esta acción la hago llamando al procedimiento BUSCARMAIL.

Luego, si existe el mail en la base de datos, muestra un error en pantalla (hasta aquí funciona de maravilla), y si no existe, debe ejecutar el segundo procedimiento (que realiza un insert en la tabla usuarios)

Como dije antes, el problema es que no ejecuta el segundo procedimiento.

Aclaro que los dos procedimientos andan por que estan probados. Es posible que haya que limpiar alguna variable? o liberar "algo"?

Para que se entienda, este sería el pseudo codigo:

verificar nombre
verificar apellido
verificar mail
verificar pass

buscar mail en base de datos //llamada al primer procedimiento

if(existe mail) mensaje de error
else registrar usuario //llamada al segundo procedimiento


cualquier cosa, apenas vuelva a casa subo el codigo entero.
  #4 (permalink)  
Antiguo 15/12/2011, 07:33
 
Fecha de Ingreso: mayo-2009
Mensajes: 66
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: ejecutar mas de un procedimiento almacenado mysql

Aquí les dejo el codigo real. Supongo que quedara cacheado algo, o alguna situación por el estilo, espero alguien tenga idea

Código PHP:
<?
//RECIBO LOS PARAMETROS
$nombre stripslashes($_POST['nombre']);
$apellido stripslashes($_POST['apellido']);
$mail stripslashes($_POST['mail']);
$pass stripslashes($_POST['pass']);

//VARIABLES PARA SALIDA EN PANTALLA
$msj "";
$img "";
$error 0;

//TRATAMIENTO DE LOS PARAMETROS
//eliminación de caracteres blancos y de nueva linea
$nombre trim($nombre);
$apellido trim($apellido);
$mail chop($mail);
$pass trim($pass);

//validación de cantidad de caracteres
if(strlen($nombre)>45){    
    
$msj 'El nombre debe tener como máximo 20 caracteres'
    
$img 'incorrecto.png';
    
$error 1;
}
else if(
strlen($nombre) <=0){ 
    
$msj 'Debe ingresar su nombre';
    
$img 'incorrecto.png';
    
$error 1;
}

else if(
strlen($apellido)>45){
    
$msj 'El apellido debe tener como máximo 20 caracteres';
    
$img 'incorrecto.png';    
    
$error 1;
}
else if (
strlen($apellido) <=0){ 
    
$msj 'Debe ingresar su apellido';
    
$img 'incorrecto.png';    
    
$error 1;
}

else if(
strlen($mail)>150){    
    
$msj 'El correo electrónico debe tener como máximo 150 caracteres';
    
$img 'incorrecto.png';    
    
$error 1;
}
else if(
strlen($mail) <=0){ 
    
$msj 'Debe ingresar su correo electrónico';
    
$img 'incorrecto.png';    
    
$error 1;
}

else if(
strlen($pass) <=0){ 
    
$msj 'Debe elegir una contraseña para su cuenta';
    
$img 'incorrecto.png';    
    
$error 1;
}
else if(
strlen($pass) < || strlen($pass) > 16){ 
    
$msj 'La contraseña debe tener entre 4 y 16 caracteres';
    
$img 'incorrecto.png';    
    
$error 1;
}

//validación de caracteres especiales en mail
else if(strpos($mail"@") == false || strpos($mail".") == false)
{
    
$msj $mail .' no es valido como correo electrónico';
    
$img 'incorrecto.png';
    
$error 1;
}
    
else{ 
//SI TODO ESTA CORRECTO
    // conectamos con la base de datos
    
require("../database/database.php");
    
$conexion mysqli_connect($host$user $passdb);
    if(!
$conexion){
        echo 
"alert('No se pudo conectar con la base de datos');";
    }
    else {
        
mysqli_select_db($conexion$db);
    }
    
    
//comprobamos que el mail no esté registrado
    
$buscarmailquery "call BUSCARMAIL('".$mail."');";
    
$buscarmail mysqli_query($conexion$buscarmailquery);
    
    if(
$row mysqli_fetch_assoc($buscarmail)){
            
$retorno $row['retorno'];
    }

    if (
$retorno >0){ //si el mail ya esta registrado.
        
$msj $mail ' ya está registrado.';
        
$img 'incorrecto.png';    
        
$error 1;
    }
    else{ 
//si el mail está disponible
        //ejecutamos el procedimiento crearusuario
         
$registroquery "call CREARUSUARIO('".$nombre."', '".$apellido."', '".$mail."', '".$pass."');";
         
$registro mysqli_query$conexion$registroquery);
         

         
$msj 'Su cuenta ha sido creada correctamente.<br>Bienvenido!';
         
$img 'correcto.png';
         
$error 0;
     }
    
mysqli_close($conexion);
}
?>
  #5 (permalink)  
Antiguo 15/12/2011, 10:32
Avatar de ElSiniestro  
Fecha de Ingreso: diciembre-2011
Ubicación: Ibagué
Mensajes: 115
Antigüedad: 12 años, 4 meses
Puntos: 23
Respuesta: ejecutar mas de un procedimiento almacenado mysql

Hola

Después del primer procedimiento (y de guardar el resultado en una variable), usa la función mysqli_free_result($buscarmail);

Creo que con eso ya se te debe solucionar
  #6 (permalink)  
Antiguo 15/12/2011, 10:39
 
Fecha de Ingreso: mayo-2009
Mensajes: 66
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: ejecutar mas de un procedimiento almacenado mysql

Cita:
Iniciado por ElSiniestro Ver Mensaje
Hola

Después del primer procedimiento (y de guardar el resultado en una variable), usa la función mysqli_free_result($buscarmail);

Creo que con eso ya se te debe solucionar
ya intente eso pero no da resultado
  #7 (permalink)  
Antiguo 15/12/2011, 11:19
Avatar de ElSiniestro  
Fecha de Ingreso: diciembre-2011
Ubicación: Ibagué
Mensajes: 115
Antigüedad: 12 años, 4 meses
Puntos: 23
Respuesta: ejecutar mas de un procedimiento almacenado mysql

Es que sinceramente eso de procedimientos almacenados, nunca lo he probado (se que es posible porque el manual dice que si funciona), pero no se como implementarlo.

Hace un tiempo en Cristalab vino alguien experto en MySQL con la misma temática y le tocó pasarse a escribir la consulta en vez del procedimiento almacenado. Más bien si quieres que todo sea más seguro, usa mysqli_stmt (pero te toca re-diseñar un poco el script).

Mejor trata de escribir la consulta en el script para ver si te funciona y después intentas lo demás

Espero haberte servido de ayuda (y no haberte confundido más).
  #8 (permalink)  
Antiguo 25/12/2011, 19:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 66
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: ejecutar mas de un procedimiento almacenado mysql

alguien mas que sepa de esto? no encuentro naaada por inet!

Etiquetas: mysql, procedimiento, registro, almacenar, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:10.