As I show what brings the variables of a stored procedure with php and mysql [closed]

0

I have a store procedure in phpmyadmin of user login, and I am not showing the values that return, can you help me? I attach the code

    DELIMITER //

CREATE PROCEDURE SP_LOGIN(
IN _User VARCHAR(20), 
IN _Pass VARCHAR(20), 
OUT ValRet VARCHAR(60),
OUT _difDias INT,
OUT _inactiva INT,
OUT _Estado INT,
OUT _idUSUARIOS INT,
OUT _PORTADA_idPORTADA INT,
OUT _NOMBRE VARCHAR(30),
OUT _RUT VARCHAR(15),
OUT _CLAVE VARCHAR(20),
OUT _EMAIL VARCHAR(50),
OUT _USERNAME VARCHAR(20))
BEGIN
DECLARE _intentos INT DEFAULT 0;
    if (SELECT idUSUARIOS, PORTADA_idPORTADA, NOMBRE, RUT, CLAVE, EMAIL, USERNAME INTO _idUSUARIOS, _PORTADA_idPORTADA, _NOMBRE, _RUT, _CLAVE, _EMAIL, _USERNAME FROM usuarios WHERE  USERNAME=_User AND CLAVE=_Pass) > 0 THEN
        SELECT DATEDIFF(Fecha_caduca, CURDATE()), DATEDIFF(CURDATE(), Fecha_alta) INTO _difDias, _inactiva FROM usuarios WHERE USERNAME = _User;
        if _difDias > 0 THEN
            if _inactiva > 30 THEN
                UPDATE usuarios SET Estado = 0 WHERE USERNAME=_User;

            END if;
            SELECT Estado INTO _Estado FROM usuarios WHERE USERNAME=_User;
        else
        UPDATE usuarios SET CLAVE = 'passExpire' WHERE USERNAME = _User;
        SET ValRet = 'Su clave expiro.';
        END if;
    else
        if (SELECT Intentos INTO _intentos FROM usuarios WHERE USERNAME = _User) > 0 THEN
            if _intentos <= 0 THEN
                UPDATE usuarios SET CLAVE = 'passBloqueada' WHERE USERNAME = _User;
                SET ValRet = 'ERROR: Clave bloqueada';
            else
                SET ValRet = 'ADVERTENCIA: le quedan '+_intentos+' intentos.';
                SET _intentos=_intentos-1;
                UPDATE usuarios SET Intentos = _intentos WHERE USERNAME = _User;
            END if;
        END if;
     END if;
     END//
     DELIMITER ;


<?php   
$sqll=mysql_query("CALL SP_PRUEBA_LOGIN(".$user.", ".$pass.", 
@RETUR,
@DIFDIA,
@INACTIVA,
@ESTADO,
@IDUSUARIO,
@IDPORTADA,
@NOMBRE,
@RUT,
@CLAVE,
@EMAIL,
@USERNAME)");
        $sqlll=mysql_query("SELECT @RETUR,
@DIFDIA,
@INACTIVA,
@ESTADO,
@IDUSUARIO,
@IDPORTADA,
@NOMBRE,
@RUT,
@CLAVE,
@EMAIL,
@USERNAME");
        $res=mysql_fetch_array($sqlll);
        $mensaje="Funciona: ".$res["@RETUR"]." !!!! ".
$res["@DIFDIA"]." !!!! ".
$res["@INACTIVA"]." !!!! ".
$res["@ESTADO"]." !!!! ".
$res["@IDUSUARIO"]." !!!! ".
$res["@IDPORTADA"]." !!!! ".
$res["@NOMBRE"]." !!!! ".
$res["@RUT"]." !!!! ".
$res["@CLAVE"]." !!!! ".
$res["@EMAIL"]." !!!! ".
$res["@USERNAME"]." !!!! ";
?>
    
asked by Kevin 29.05.2017 в 16:29
source

1 answer

1

I solved it. My mistake was:

  • Bo put quotation marks ( '' ) when passing the variables $user and $pass to the procedure

    CALL SP_PRUEBA_LOGIN('".$user."', '".$pass."', 
    @RETUR,
    @DIFDIA,
    @INACTIVA,
    @ESTADO,
    @IDUSUARIO,
    @IDPORTADA,
    @NOMBRE,
    @RUT,
    @CLAVE,
    @EMAIL,
    @USERNAME)
    
  • In the definition of the procedure, the size of the pass was very small. Since the pass is encrypted, the values it takes are larger than the definition.

  • answered by 29.05.2017 / 18:08
    source