Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   ¿Stored procedured como hacer que regrese valores y poder usarlo en php delphi c# (https://www.clubdelphi.com/foros/showthread.php?t=89222)

JXJ 18-10-2015 22:10:34

¿Stored procedured como hacer que regrese valores y poder usarlo en php delphi c#
 
Hola.

estoy con proeblamas con un stored procedure.

la idea es usarlo cuando registre un usuario.
y si existe. me regre el numero de id autoincrementable. ultimo. si es que no existe el usuario
y que me regrese un valor que me confirme si existe o no


como herramienta use heidisql que me da el error de que estoy declarando parametros que necesitan ingresar valor.
yo tengo entendido que como son valores INOUT o OUT, no me los deberia de pedir

y me da error. con sql maestro me dice que no se encuentra la columna maria pero si yo declare la columna como usuario. y maria
es el valor que voy a usar.

con la consola de comandos de mysql no he tenido suerte. me da error de odbc, cuando hago el login.


en php me da el error Fall� SELECT: (2014) Commands out of sync; you can't run this command now

Código:

<?php
$mysqli = new mysqli("localhost", "root", "a2210", "ejemplo");
if ($mysqli->connect_errno) {
    echo "Falló la conexión a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}



if (!$mysqli->query("CALL usuarioregistra('maria111', 'dsa111', 'fe11')")) {
    echo "Falló CALL: (" . $mysqli->errno . ") " . $mysqli->error;
}

if (!($resultado = $mysqli->query("SELECT  idusuario FROM usuario"))) {
    echo "Falló SELECT: (" . $mysqli->errno . ") " . $mysqli->error;
}

// var_dump($resultado->fetch_assoc());


?>

este es el stored procedured.
Código SQL [-]

DROP PROCEDURE IF EXISTS usuarioregistra;

DELIMITER |

CREATE DEFINER = 'root'@'localhost' PROCEDURE usuarioregistra 
(
  IN     username   varchar(20),
  IN     userpass   varchar(20),
  IN     usermail   varchar(20),
  INOUT  IDUSER     int,
  INOUT  EXISTUSER  int
)
BEGIN
  /* Procedure text  la idea es que regrese el idusuario si ya existe y ayuda a validar registros de usuarios
   y si no existen los usuarios debe de poder regresar el id del nuevo usuario registrado
  */
    DECLARE SomeId int;
    DECLARE CheckExists int;  
    SET CheckExists = 0;  
    

    
      SELECT count(*) INTO CheckExists from usuarios WHERE usuario = username;   
 
    IF (CheckExists > 0) THEN 
     
        SELECT idusuario INTO SomeId FROM usuarios WHERE usuario = username;
      set  EXISTUSER = 1;
         
    ELSE 
           
        insert into usuarios(usuario,contra, email_address) 
        values (username,userpass, usermail);  
        
        SELECT SomeId   = LAST_INSERT_ID();     
   /* no jajala      SELECT @idusuario = LAST_INSERT_ID();
   */
          set EXISTUSER = 0;
                
    END IF; 
    /*  SET  IDUSER = SomeId;    
*/    
     
  
  
END|

DELIMITER ;


¿que hago mal?

¿si se pueden obtener valores de regreso del ultimo registro ingresado?
¿si se pueden obtener valores como lo estoy haciendo?

gracias

orodriguezca 19-10-2015 21:26:22

Suponiendo que la base de datos es Firebird (porque no lo especificas) y que la columna idUsuario es una identity column, puedes hacer los siguiente:

Código SQL [-]
      select SomeId = (insert into usuarios(usuario,contra, email_address) 
                                 values (username,userpass, usermail)
                                returning idUsuario);

JXJ 22-10-2015 07:33:52

es base de datos mysql

crei que lo habia especificado en el titulo.


voy a seguri revisando.


La franja horaria es GMT +2. Ahora son las 15:00:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi