Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Que falla en esta consulta tan simple?

Estas en el tema de Que falla en esta consulta tan simple? en el foro de Mysql en Foros del Web. Hola amigos como estais, Mirad estoy un poco desconcertado con esta consulta: $consulta='SELECT * FROM car WHERE Nnoticia ='.$_SESSION["noticia"].'ORDER BY fecha DESC'; $resultado = mysql_query($consulta,$conexion); ...
  #1 (permalink)  
Antiguo 27/11/2010, 19:11
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Que falla en esta consulta tan simple?

Hola amigos como estais,

Mirad estoy un poco desconcertado con esta consulta:

$consulta='SELECT * FROM car WHERE Nnoticia ='.$_SESSION["noticia"].'ORDER BY fecha DESC';
$resultado = mysql_query($consulta,$conexion);


while($array = mysql_fetch_array($resultado)){

Da error en la linea donde esta el WHILE, la cosa es que la hago desde phpmyadmin y funcina perfectamente a ver si alguien ve algo.


Un saludo amigos
  #2 (permalink)  
Antiguo 27/11/2010, 19:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Que falla en esta consulta tan simple?

Es un problema de PHP:
La sentencia está bien, pero esa forma de leer los resultados te fallará si la consulta no devuelve registros; el error salta porque WHILE requiere que al menos haya un resultado, ya que se ejecuta al menos una vez antes de verificar la condición... y es en esa ejecución cuando te falla.
Lo que debes hacer primero, antes de usar el while es comprobar que el resultado de la consulta contenga algo válido.
¿Nunca te preguntaste por qué en los tutuoriales y ejemplos, el while suele venir luego de un if($result)? Porque esa sola verificación ya te dice si puedes o no recorrer la tabla de resultados.
__________________
¿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 27/11/2010, 20:03
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Que falla en esta consulta tan simple?

Hola amigo como estas,

debo decir que esa consulta arroja mas de 60 resultados desde phpmyadmin asique no puede ser por falta de datos. Curiosamente me acabo de dar cuentar que los esta ordenador por el titulo.

M as adelante en ese codigo compruebo:

if($array['titulo'] == $media->group->title){

Creo que esta afectando esta comprobacion a la hora de mostrarlos


Un saludo amigo y gracias or tu respuesta
  #4 (permalink)  
Antiguo 28/11/2010, 06:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Que falla en esta consulta tan simple?

Cita:
debo decir que esa consulta arroja mas de 60 resultados desde phpmyadmin asique no puede ser por falta de datos. Curiosamente me acabo de dar cuentar que los esta ordenador por el titulo.
Que los responda por phpMyAdmin, te advierto, no implica que en el script algo funcione bien. Sólo que no hay errores de sintaxis, porque en el phpMyAdmin no puedes poner la variable $_SESSION["noticia"] que estás usando, sino en todo caso un valor fijo, que has debido poner a mano y por tanto puede ser distinto a lo que la sentencia está tomando en el script (1 byte de diferencia ya es significativo).

Una de las razones por la que insistimos en que no se ponga código de programación (PHP o lo que sea, las reglas de este foro así lo dicen) en este foro es porque el código de las aplicaciones esconde los problemas que puedan provenir del uso de variables. En tu caso, yo insisto en que si se produce que
Cita:
Da error en la linea donde esta el WHILE, la cosa es que la hago desde phpmyadmin y funcina perfectamente
El problema es qué puede producir un error así en el WHILE. Por mi experiencia personal y lo que sé del funcionamiento interno del while en este y otros lenguajes (en todos opera de la misma forma), un error como lo describes se da cuando no hay registros en la tabla devuelta.
Ahora bien, y esto lo tienes que analizar: si la variable que usas llega vacía por alguna razón, o contiene valores que puedan devolver vacío (dar FALSE), la tabla vendrá con los encabezados, pero sin datos...

¿Has consierado esa posibilidad?

No sirve, como dije, usar de referencia el phpMyAdmin para comprobarlo, porque no tienes acceso al valor que tomas en la variable; por ello estás reproduciendo mal el problema.

Lo que debes hacer es una de dos cosas:
1) Verifica el valor de la variable antes y después de insertarla:
Código PHP:
Ver original
  1. echo $_SESSION["noticia"];
  2. $consulta='SELECT * FROM car WHERE Nnoticia ='.$_SESSION["noticia"].'ORDER BY fecha DESC';
  3. echo $consulta;
  4. $resultado = mysql_query($consulta, $conexion);
  5. while($array = mysql_fetch_array($resultado)){}

2) Verifica realmente lo que está volviendo, y en todo caso si MySQL está retornando un error que no se vea:
Código PHP:
Ver original
  1. $consulta='SELECT * FROM car WHERE Nnoticia ='.$_SESSION["noticia"].'ORDER BY fecha DESC';
  2. $resultado = mysql_query($consulta,$conexion);
  3. if (!$resultado) {
  4.     die('Error de MySQL: ' . mysql_error());
  5. }
  6. else
  7.     {
  8.      if(mysql_num_rows($resultado)>0)
  9.         {
  10.          while($array = mysql_fetch_array($resultado)){}
  11.          }
  12.     }

Si no da error, pero tampoco obtiene registros... la variable está vacía o da False. ¿OK?

En cualquier caso, el primer ejemplo te permitirá recuperar la sentencia que realmente estás enviando, y usar eso para probarlo en MySQL...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: falla, simple
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 05:54.