Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/06/2014, 06:53
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ¿Qué estoy haciendo mal? [Procedimiento almacenado]

Primer consejo: No estás escribiendo PHP, sino SQL. Si un parámetro de entrada se usa como entero, no debes ingresar por él nada que no sean enteros. Nada.
El parámetro "idx" lo estás usando tanto para ingresar "Agregar" como el numero de ID del usuario, y eso es un error conceptual. O es una cosa, o es la otra, pero no debes usarlo para ambas posibilidades.
Además, tampoco lo necesitas como caracter, porque simplemente conque entre el numero, o un cero, puedes contar cuantos registros hay con ese ID y si no devuelve ninguno es que hay qe agregar el usuario (no debe existir jamás un ID cero en la tabla, eso es absurdo).
Por otro lado, a menos que vayas a usar el numero del nuevo usuario fuera del SP inmediatamente, y no se cierre la conexión a la base en ningún momento, no conviene usar variables de usuario global de MySQL, sino locales del SP.
Si lo que necesitas es recuperar el ID generado, simplemente le pones un SELECT numUsuario al final, y la ejecución del SP te devolverá por resultado el numero generado.

La idea sería mas o menos así:
Código MySQL:
Ver original
  1. CREATE PROCEDURE CrearUsuario (
  2.     IN idx CHAR(9),
  3.     IN nombrex VARCHAR(25),
  4.     IN apellidox VARCHAR(25),
  5.     IN edadx INT(2),
  6.     IN generox CHAR(1),
  7.     IN ciudadx VARCHAR(30),
  8.     IN estadox VARCHAR(30),
  9.     IN paisx VARCHAR(30))
  10.     DECLARE numUsuario INT DEFAULT 0;
  11.     IF (SELECT count(1) FROM Usuarios WHERE id = idx) = 0 THEN
  12.         SELECT MAX(id) FROM Usuarios INTO numusuario;
  13.         SET numUsuario = numUsuario + 1;
  14.         INSERT INTO Usuarios(id, nombre, apellido, edad, genero, ciudad, estado, pais)
  15.         VALUES(numUsuario, nombrex, apellidox, edadx, generox, ciudadx, estadox, paisx);
  16.     ELSE
  17.         UPDATE Usuarios
  18.           SET nombre = nombrex,
  19.           apellido = apellidox,
  20.           edad = edadx,
  21.           genero = generox,
  22.           ciudad = ciudadx,
  23.           estado = estadox,
  24.           pais = paisx
  25.         WHERE id = idx;
  26.     END IF;
  27.     SELECT numUsuario;
  28. END$$
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)