Foros del Web » Programando para Internet » PHP »

Problema al ejecutar dos consultas seguidas en MySQL

Estas en el tema de Problema al ejecutar dos consultas seguidas en MySQL en el foro de PHP en Foros del Web. Hola gente, tengo un problema y no entiendo porque se produce: Código PHP: //Parte 1 $query = 'CALL playlistVote("' . $_SESSION [ 'userid' ]. '","' . $_POST ...
  #1 (permalink)  
Antiguo 04/01/2015, 10:28
VityOsma
Invitado
 
Mensajes: n/a
Puntos:
Problema al ejecutar dos consultas seguidas en MySQL

Hola gente, tengo un problema y no entiendo porque se produce:

Código PHP:
//Parte 1
$query='CALL playlistVote("'.$_SESSION['userid'].'","'.$_POST['id'].'","'.$_POST['num'].'");';
    
$db->query($query);
//Parte 2
    
$query='select * from channel'.$_POST['type'].' where youtube = "'.$_POST['id'].'" order by points desc limit 1';
    
$result=$db->query($query);
    while(
$fila=$result->fetch_array()){
        
//echo formatNumber($fila['points']);
    

Al ejecutar la parte 1 todo va bien, ejecuta el procedimiento sin problema.
Al ejecutar la parte 2 si no se ha ejecutado también funciona todo correctamente.

Al ejecutar las dos, una detrás de otra me devuelve el siguiente fallo:

Fatal error: Call to a member function fetch_array() on a non-object in C:\wamp\www\TuneXperts\estructura\left\playlist-script.php on line 101

Todas las consultas de la web las realizo de la misma forma, y aquí me devuelve ese fallo, si hago un echo $query, y ejecuto la consulta directamente en Workbench me devuelve resultados sin ningún problema.

Alguien sabe a que se puede deber esto? Gracias por las respuestas.

Para más info el procedimiento que utilizo es el siguiente (Se que esta mal creado pero lo modificare cuando llegue el momento):

Código PHP:
CREATE PROCEDURE playlistVote (IN usuario int,IN idvideo varchar(11),IN val int)
begin
declare existe INT;
declare 
valor INT;
declare 
ant INT;
select count(idinto existe from musiclikes where youtube idvideo and user usuario;
if (
existe 0then
    insert into musiclikes
(user,youtube,valuevalues (usuario,idvideo,val);
else
    
/*Borrar voto anterior*/
    
select value into ant from musiclikes where youtube idvideo and user usuario;
    if(
ant=0then 
        update channelsongs set points 
points 1 where youtube idvideo;
        
update channellive set points points 1 where youtube idvideo;
        
update channelsessions set points points 1 where youtube idvideo;
    else
        
update channelsongs set points points 1 where youtube idvideo;
        
update channellive set points points 1 where youtube idvideo;
        
update channelsessions set points points 1 where youtube idvideo;
    
end if;
    
update musiclikes set value val where youtube idvideo and user usuario;
end if;
if(
val=0then 
        update channelsongs set points 
points 1 where youtube idvideo;
        
update channellive set points points 1 where youtube idvideo;
        
update channelsessions set points points 1 where youtube idvideo;
    else
        
update channelsongs set points points 1 where youtube idvideo;
        
update channellive set points points 1 where youtube idvideo;
        
update channelsessions set points points 1 where youtube idvideo;
    
end if;
    
select val,ant;
end
// 
  #2 (permalink)  
Antiguo 04/01/2015, 10:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.323
Antigüedad: 12 años, 2 meses
Puntos: 2654
Respuesta: Problema al ejecutar dos consultas seguidas en MySQL

Desde el momento en que si lo ejecutas en MySQL Workbench no se produce ningún problema, entonces no hay defectos en SQL, y tu problema es de programación, tema OFF TOPIC en el foro de MySQL..

Muevo a foro de PHP para que te asistan en la solución del lado que corresponde.

Anticipandome a las respuestas que recibas, en realidad es imposible saber qué sucede porque ni te estás molestando en capturar los errores devueltos por MySQL, lo quee es básico en programación . En tu código asumes que la segunda consulta funciona bien, pero no lo validas, y como mínimo eso es algo que hay que hacer siempre.
Nunca debes asumir que porque mandas a ejecutar un proceso ese proceso termina correctamente y sin errores. SIEMPRE deber verificar que puede haber fallos y recuperar los mensajes de error, que es lo que te puede indicar qué pasó.

Si te fijas en el manual de referencia de PHP verás ejeplos claros de uso de captura de erroes en el uso de la lirbería de acceso a datos MYSQLI.

Usalos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/01/2015, 16:28
VityOsma
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema al ejecutar dos consultas seguidas en MySQL

La verdad que no tengo mucha idea de como tratar los errores, es un tema que nunca he tratado y que me tendré que poner a ello, pero empezar algo de 0 es difícil, así que lo dejaré para más adelanta, cuando tenga las web más completa y le daré un repaso a todos los archivo para capturar errores y quedarme con ello mejor al hacerlo repetidas veces.

La consulta se que se ejecuta correctamente porque la he probado tanto en Workbench como en la propia web comentando la parte 1 o la parte 2 y dejando solo una de ellas se ejecuta correctamente.

El problema es cuando están las dos, así que supongo que sera porque al ejecutar la segunda la primera sigue en ejecución o alguna cosa así pero como no se como actúa exactamente el servidor no puedo averiguar la causa del problema.

Respecto a los errores, puedo saber con ello porque falla la consulta aún estando la consulta correctamente, al menos si la ejecuto de las dos formas que he mencionado, al capturar los errores que información puedo conseguir que no pueda conseguir con condicionales?

Gracias por la respuesta.

Etiquetas: mysql
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 18:45.