Este es el codigo de mi procedimiento:
Código SQL:
Ver originalDELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `partido`(
_idPartido INT,
_tipoPartido VARCHAR(2),
_idGanador INT,
_idPerdedor INT,
_idJugador1 INT,
_idJugador2 INT,
_cadenaSets VARCHAR(500),
_idTorneo INT,
_edicion INT,
_QUALY_VAR INT
)
BEGIN
DECLARE estadoPartido VARCHAR(50);
DECLARE var_idGanador, var_idPerdedor INT;
DECLARE EXIT HANDLER
FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
ROLLBACK TO PUNTO;
START TRANSACTION;
SAVEPOINT PUNTO;
################################################
SELECT estado INTO estadoPartido FROM partidos WHERE idPartido = _idPartido;
IF estadoPartido = 'pendiente' THEN
IF _tipoPartido = 'wo' THEN
INSERT INTO sets (
idPartido,idJugador1,idJugador2,gamesJugador1,gamesJugador2
)
VALUES (
_idPartido, _idJugador1, _idJugador2, 0, 0
);
ELSE # ELSE DEL IF _TIPO_PARTIDO = WO
SET @subir = CONCAT('INSERT INTO sets VALUES ',_cadenaSets);
PREPARE consulta FROM @subir;
EXECUTE consulta;
DEALLOCATE PREPARE consulta;
END IF; # END DEL IF _TIPO_PARTIDO = WO
UPDATE partidos
SET idGanador = _idGanador,
idPerdedor = _idPerdedor,
estado = 'jugado',
tipo = _tipoPartido,
fechaJugado = DATE(now()),
horaJugado = TIME(now())
WHERE idPartido = _idPartido;
ELSE # ELSE DEL IF _ESTADO_PARTIDO = PENDIENTE
SELECT 'Este partido ya fue cargado';
END IF; # END DEL IF _ESTADO_PARTIDO = PENDIENTE
END
Cuando lo llamo asi en workbench funciona perfecto...
Código SQL:
Ver originalCALL 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 originalmysql_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