Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/06/2012, 11:09
Avatar de djaevi
djaevi
 
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 1 mes
Puntos: 47
Respuesta: Problema con PHP y Stored Procedure

Este es el codigo de mi procedimiento:

Código SQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE DEFINER=`root`@`localhost` PROCEDURE `partido`(
  4.     _idPartido INT,
  5.     _tipoPartido VARCHAR(2),
  6.     _idGanador INT,
  7.     _idPerdedor INT,
  8.     _idJugador1 INT,
  9.     _idJugador2 INT,
  10.     _cadenaSets VARCHAR(500),
  11.     _idTorneo INT,
  12.     _edicion INT,
  13.     _QUALY_VAR INT
  14. )
  15. BEGIN
  16.  
  17. DECLARE estadoPartido VARCHAR(50);
  18. DECLARE var_idGanador, var_idPerdedor INT;
  19.  
  20. DECLARE EXIT HANDLER
  21.     FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
  22.         ROLLBACK TO PUNTO;
  23.  
  24. START TRANSACTION;
  25.  
  26. SAVEPOINT PUNTO;
  27.  
  28. ################################################
  29.  
  30. SELECT estado INTO estadoPartido FROM partidos WHERE idPartido = _idPartido;
  31.  
  32. IF estadoPartido = 'pendiente' THEN
  33.  
  34.     IF _tipoPartido = 'wo' THEN
  35.                
  36.        INSERT INTO sets (
  37.             idPartido,idJugador1,idJugador2,gamesJugador1,gamesJugador2
  38.             )
  39.             VALUES (
  40.             _idPartido, _idJugador1, _idJugador2, 0, 0
  41.             );
  42.            
  43.     ELSE # ELSE DEL IF _TIPO_PARTIDO = WO
  44.  
  45.         SET @subir = CONCAT('INSERT INTO sets VALUES ',_cadenaSets);
  46.         PREPARE consulta FROM @subir;
  47.         EXECUTE consulta;
  48.         DEALLOCATE PREPARE consulta;
  49.        
  50.     END IF; # END DEL IF _TIPO_PARTIDO = WO    
  51.        
  52.     UPDATE partidos
  53.         SET idGanador = _idGanador,
  54.             idPerdedor = _idPerdedor,
  55.             estado = 'jugado',
  56.             tipo = _tipoPartido,
  57.             fechaJugado = DATE(now()),
  58.             horaJugado = TIME(now())
  59.         WHERE idPartido = _idPartido;
  60.    
  61. ELSE # ELSE DEL IF _ESTADO_PARTIDO = PENDIENTE
  62.  
  63.     SELECT 'Este partido ya fue cargado';
  64.    
  65. END IF; # END DEL IF _ESTADO_PARTIDO = PENDIENTE
  66.  
  67. END

Cuando lo llamo asi en workbench funciona perfecto...

Código SQL:
Ver original
  1. CALL partido(14, '', 1, 42, 1, 42, "(NULL, 14, 1, 42, 6, 3),(NULL, 14, 1, 42, 6, 2)", 16, 2012, 71);

Pero esto no funciona...

Código PHP:
Ver original
  1. mysql_query("CALL partido($idPartido, '$tipo', $ganador, $perdedor, $idJug1, $idJug2, \"$str\", $torneo, $edicion, $QUALY_VAR)");

Aclaro que todas las variables tienen valor lo he comprobado imprimiendo en pantalla y estoy enviando bien el tipo de datos de cada una, de hecho sino lo hiciera tampoco funcionaria en workbench, gracias por contestar nufort.

Saludos