Foros del Web » Programando para Internet » PHP »

Procedimiento Almacenado, me entrega FALSE

Estas en el tema de Procedimiento Almacenado, me entrega FALSE en el foro de PHP en Foros del Web. Hola foreros, Que tal, saben tengo un dilema con unos procedimientos almacenados (ya me documente en el foro y en google), pero sigo sin resolver, ...
  #1 (permalink)  
Antiguo 23/12/2011, 07:15
Avatar de Prais  
Fecha de Ingreso: octubre-2010
Mensajes: 114
Antigüedad: 14 años, 1 mes
Puntos: 6
Exclamación Procedimiento Almacenado, me entrega FALSE

Hola foreros,

Que tal, saben tengo un dilema con unos procedimientos almacenados (ya me documente en el foro y en google), pero sigo sin resolver, les cuento:

tengo estos 2 procedimientos ingresados en el motor de mysql:

Código MySQL:
Ver original
  1. CREATE PROCEDURE Dnx_MuestraProducto_1(IN HoraActual datetime)
  2. SELECT * FROM productos WHERE estado=2 AND
  3. ( fecha_termino > HoraActual )
  4. SELECT * FROM productos WHERE en_home=1 AND estado>1 AND (fecha_termino <= HoraActual )
  5. ORDER BY fecha_termino ASC, nombre ASC LIMIT 0,9

Código MySQL:
Ver original
  1. CREATE PROCEDURE Dnx_SumaClick_1(IN id int )
  2. SELECT Sum(clicks) as c FROM apuestas WHERE id_producto=id

Donde compilan y todo, ahora por el lado de la programacion lo hago asi, es importante mencionar que el primer procedimiento almacenado, le pasa al segundo el resultado del id de esta forma:

Código PHP:
Ver original
  1. $rs = mysql_query("CALL Dnx_MuestraProducto_1('date(Y-m-d H:i:s)')");//primer sp, y le entrega resultado del id al segundo sp    
  2. while($row=mysql_fetch_assoc($rs))//rescato el resultado
  3. {
  4.      $rs2 = mysql_query( "CALL Dnx_SumaClick_1('$row[id]')");//segundo sp
  5.      if($row2=mysql_num_rows($rs2)//rescato el resultado

Si les puedo decir con certeza que el primer sp si me trae los resultados y si le entrega el $row[id] al segundo sp (ya que uso eclipse con xdebug..jejeje).
el problema surge que el segundo sp cuando lo debugeo en la variable $rs2 este viene con un false.

revise la programacion y no encuentro error, ya que uso el mismo metodo para la primera y esta resulta, la segunda me parece que puede ser en que no cree bien el sp 2 ??? para rescatar el dato.

Orientacion pliss.
  #2 (permalink)  
Antiguo 23/12/2011, 09:24
Avatar de Prais  
Fecha de Ingreso: octubre-2010
Mensajes: 114
Antigüedad: 14 años, 1 mes
Puntos: 6
Exclamación Respuesta: Procedimiento Almacenado, me entrega FALSE

Averiguando ya que hay opiniones encontradas

Última edición por Prais; 23/12/2011 a las 09:34 Razón: cambio de opinion
  #3 (permalink)  
Antiguo 23/12/2011, 09:52
Avatar de Prais  
Fecha de Ingreso: octubre-2010
Mensajes: 114
Antigüedad: 14 años, 1 mes
Puntos: 6
Exclamación Respuesta: Procedimiento Almacenado, me entrega FALSE

Hee, creo ya saber por donde va el problema,
Solo puedo ejecutar una query por archivo, cuando uso un sp (el sp se ejecuta correctamente y devuelve los resultados), las demas query empiezan a devolver FALSE.

En cambio si saco el sp y lo dejo como una query normal de php, si corren todas.
por ende me voy a la configuracion del php.ini

En el manual de php dice:

mysqli.allow_persistent integer
Habilitar la capacidad de crear conexiones persistentes usando mysqli_connect().

mysqli.max_persistent integer
Máximo de conexiones persistentes que se pueden hacer.Se establece en 0 para ilimitado.

mysqli.max_links integer
Número máximo de conexiones con MySQL por proceso.


Y mi archivo php.ini esta asi:

[MySQLi]

; Maximum number of persistent links. -1 means no limit.; http://php.net/mysqli.max-persistent
mysqli.max_persistent = -1

; Maximum number of links. -1 means no limit.
; http://php.net/mysqli.max-links
mysqli.max_links = -1


No soy estupendo en el ingles pero segun sale en mi archivo php.ini
el -1 es ilimitado y no 0 como sale en el manual php.

Lo pruebo y comento, no lo hago altiro porque no tengo la contraseña para bajar el servicio de apache, para que tengan efectos los cambios.

De todas maneras si alguien entiende mas del tema se agradece.
  #4 (permalink)  
Antiguo 23/12/2011, 12:00
Avatar de Prais  
Fecha de Ingreso: octubre-2010
Mensajes: 114
Antigüedad: 14 años, 1 mes
Puntos: 6
Respuesta: Procedimiento Almacenado, me entrega FALSE

Ya obtuve la solucion la posteo mas abajo, nada que ver con el php.ini

Al final pregunte y me respondi solo.
Pero les dejo la solucion, ya que de seguro le va evitar a mas de alguien algunas horitas frente al PC.

Última edición por Prais; 23/12/2011 a las 17:06
  #5 (permalink)  
Antiguo 23/12/2011, 17:19
Avatar de Prais  
Fecha de Ingreso: octubre-2010
Mensajes: 114
Antigüedad: 14 años, 1 mes
Puntos: 6
Exclamación Respuesta: Procedimiento Almacenado, me entrega FALSE

Ok, les dejo la sintaxis y explico que este codigo trata de un procedimiento almacenado que su resultado alimenta a otros dos procedimientos almacenados, cosa que ellos puedan ejecutar su labor.

[En mysql, Los SP los postie mas arriba]

Código PHP:
Ver original
  1. mysqli_multi_query($link, "CALL Dnx_MuestraProducto_1('date(Y-m-d H:i:s)')");
  2. $DatoSp_1 = mysqli_store_result($link);
  3. while($row = mysqli_fetch_array($DatoSp_1))
  4. {
  5.     mysqli_next_result($link);
  6.     mysqli_multi_query($link,"CALL Dnx_SumaClick_1('$row[id]')");
  7.     $DatoSp_2 = mysqli_store_result($link);
  8.     if($row2=mysqli_fetch_array($DatoSp_2))
  9.                {
  10.               //lo que sea
  11.               }
  12.     mysqli_free_result($DatoSp_2);
  13.     mysqli_next_result($link);
  14.     mysqli_multi_query($link, "CALL Dnx_UsuarioApuesta_1('$row[id]')");
  15.     $DatoSp_3 = mysqli_store_result($link);
  16.     if($row3=mysqli_fetch_array($DatoSp_3))
  17.                {
  18.               //lo que sea
  19.                }
  20.              mysqli_free_result($DatoSp_3);
  21.              mysqli_free_result($DatoSp_1);
  22. }//cierre while
  23. mysqli_close($link);

Recordar que la variable $link, trae la conexion, de esta forma lo hago:
Código PHP:
Ver original
  1. $servidor ="localhost";
  2. $usuario_db ="pepito";
  3. $password_db ="pagadoble";
  4. $db ="porfin";
  5.  
  6. $link = mysqli_connect($servidor, $usuario_db, $password_db, $db);
  7.  
  8. {
  9.     printf("Connect failed: %s\n", mysqli_connect_error());
  10.     exit();
  11. }
Eso es y funciona a la perfeccion.-
Saludos Foreros.

Etiquetas: entrega, false, mysql, procedimiento, sql, almacenar, variables
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 09:27.