Foros del Web » Programando para Internet » PHP »

Problema con PHP y Stored Procedure

Estas en el tema de Problema con PHP y Stored Procedure en el foro de PHP en Foros del Web. Hola a todos, antes que nada no se si esto va aca o en el subforo de mysql pero el problema que tengo incluye a ...
  #1 (permalink)  
Antiguo 25/06/2012, 10:50
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años
Puntos: 47
Problema con PHP y Stored Procedure

Hola a todos, antes que nada no se si esto va aca o en el subforo de mysql pero el problema que tengo incluye a ambos jeje.

Resulta que tengo un procedimiento almacenado (stored procedure) bastante simple el problema que tengo es que al llamarlo desde la consola de mysql workbench este se ejecuta perfectamente en 1 segundo y al llamarlo desde php se queda tildado y me arroja el error de max execution time 30 seconds. Lo raro es que la llamada es exactamente igual, es mas copio el comando CALL miProcedimiento etc etc de la consola de workbench a php y no funciona. Alguien sabe a que se debe este extraño comportamiento?, si necesitan que ponga algun tipo de codigo no tengo problemas.

Desde ya muchas gracias. Saludos.
  #2 (permalink)  
Antiguo 25/06/2012, 10:57
 
Fecha de Ingreso: noviembre-2010
Mensajes: 4
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con PHP y Stored Procedure

Hola!

Seria conveniente que pongas algo del codigho que utilizas para la ejecucion.

Saludos.
  #3 (permalink)  
Antiguo 25/06/2012, 11:09
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años
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

Etiquetas: mysql, procedure, stored
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:53.