Foros del Web » Programando para Internet » PHP »

Error en sentencia SELECT

Estas en el tema de Error en sentencia SELECT en el foro de PHP en Foros del Web. Hola a todos Soy nuevo manejando PHP y tengo un problema al momento de llamar los tados por medio de la sentencia SELECT al igualar ...
  #1 (permalink)  
Antiguo 10/07/2012, 14:46
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 13 años, 10 meses
Puntos: 1
Error en sentencia SELECT

Hola a todos

Soy nuevo manejando PHP y tengo un problema al momento de llamar los tados por medio de la sentencia SELECT al igualar la codicion WHERE a una variable.
Este es el codigo que estoy usando

$avatar = $_SESSION["nombre_usuario"];
echo $avatar;

$ssql = "SELECT * FROM usuario WHERE avatar_usuario = '$avatar'";
$rs = mysql_query($ssql);

if (mysql_num_rows($rs)>0) {
while ($fila = mysql_fetch_array($rs)) {
echo $fila["nombre_usuario"];
}
}

pero al correrlo en el navegador me da una admvertencia

Muchas gracias por la ayuda que me puedan brindar
  #2 (permalink)  
Antiguo 10/07/2012, 14:48
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Error en sentencia SELECT

ajá... ¿y cuál es la advertencia?
  #3 (permalink)  
Antiguo 10/07/2012, 19:32
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Error en sentencia SELECT

Hola

Haciendo cambios y pruebas ya no me esta dando la advertencia, sin embargo tampoco me imprime el dato que le doy en el segundo echo

echo $fila["nombre_usuario"];

es como si array estuviera vacío

Gracias
  #4 (permalink)  
Antiguo 10/07/2012, 19:38
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: Error en sentencia SELECT

Si pasa de esta parte
if (mysql_num_rows($rs)>0) { ... }
Entonces tiene datos.

Prueba volcando el array

Código PHP:
Ver original
  1. while ($fila = mysql_fetch_array($rs)) {
  2. var_dump($fila);
  3. }

Saludos!
  #5 (permalink)  
Antiguo 10/07/2012, 20:07
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Error en sentencia SELECT

ya lo intente y no escribe nada en la pantalla.

Basicamente lo que estoy intentando hacer es tomar el valor del avatar que esta guardado en la variable de sesión, y usarlo para llamar los demás datos del registro en la BD y así poder mostrarlos al usuario para que pueda actualizarlos.

Esta es la forma en la que se me ocurre que puedo hacerlo, no se si hay otra mejor
  #6 (permalink)  
Antiguo 10/07/2012, 20:26
 
Fecha de Ingreso: marzo-2009
Mensajes: 1
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Error en sentencia SELECT

Remplaza el if --> if (!isset($rs)) y pruebalo, seria conveniente que pongas la función mysql_query($ssql,$conex) donde incluye la variable de conexión.
  #7 (permalink)  
Antiguo 11/07/2012, 08:41
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Error en sentencia SELECT

hice los cambios que me dices y quedo asi



Código PHP:
        $avatar $_SESSION["nombre_usuario"];
    
$ssql "SELECT * FROM usuario WHERE avatar_usuario = '$avatar'";
    
$rs mysql_query($ssql,$conectar_bd);

    if (!isset(
$rs)) {
        echo 
"La variable no se puede capturar";
            }else{
            echo 
"Hola";
            while (
$fila mysql_fetch_array($rs)) {
                echo 
$fila["nombre_usuario"];
            }
        } 
y cuando lo ejecuto en el navegador se va por el else imprime el Hola, pero no imprime el bucle
  #8 (permalink)  
Antiguo 11/07/2012, 09:17
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: Error en sentencia SELECT

EL problema es el comportamiento de mysql_query

esta función independientemente de que exista el recurso que busca en la base de datos o no.
Siempre devolverá un valor y por ende $rs siempre estará definida almeno que se produzca un error en la consulta y creo que ni así.

Mira lo ideal es utilizar mysql_num_rows();

$rs = mysql_query($ssql,$conectar_bd);

Código PHP:
Ver original
  1. $rs = mysql_query($ssql, $conectar_bd);
  2. if (mysql_query_rows($rs)) {
  3. while ($fila = mysql_fetch_array($rs)) {
  4. /* .... */
  5.  }
  6. }

Saludos!
  #9 (permalink)  
Antiguo 11/07/2012, 10:13
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Error en sentencia SELECT

La sentencia "mysql_query_rows" dice que no existe
  #10 (permalink)  
Antiguo 11/07/2012, 10:15
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: Error en sentencia SELECT

hola

muestra el codigo para ver como te quedo, y mirar que error puede tener.
  #11 (permalink)  
Antiguo 11/07/2012, 10:18
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: Error en sentencia SELECT

jajaja la puse mal perdon.
mysql_num_rows
  #12 (permalink)  
Antiguo 11/07/2012, 10:27
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Error en sentencia SELECT

Asi es como la tenia originalmente jejeje
La cambie me quedo asi

Código PHP:
Ver original
  1. $avatar = $_SESSION["nombre_usuario"];
  2.  
  3.     $ssql = "SELECT * FROM usuario WHERE avatar_usuario = $avatar";
  4.     $rs = mysql_query($ssql);
  5.  
  6.     if (mysql_num_rows($rs)>0) {
  7.             while ($fila = mysql_fetch_array($rs)) {
  8.             echo $fila["nombre_usuario"];
  9.                 }
  10.     }else{
  11.         echo "La variable no se puede capturar";
  12.     }

y me da la siguiente advertencia
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/XXXXXXX/formularios/actualizar_datos.php on line 23

La linea 23 es este codigo

if (mysql_num_rows($rs)>0) {
  #13 (permalink)  
Antiguo 11/07/2012, 10:39
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: Error en sentencia SELECT

Eso sucede por qe mysql_query retorna un valor booleano o sea FALSE por aparentemente se produjo un error, para saber el error


Prueba de esta forma.
Código PHP:
Ver original
  1. $ssql = "SELECT * FROM usuario WHERE avatar_usuario = $avatar";
  2.     $rs = mysql_query($ssql) or die(mysql_error());
  3.  
  4.     if (mysql_num_rows($rs)>0) {
  5.             while ($fila = mysql_fetch_array($rs)) {
  6.             echo $fila["nombre_usuario"];
  7.                 }
  8.     }else{
  9.         echo "La variable no se puede capturar";
  10.     }


Saludos!
  #14 (permalink)  
Antiguo 11/07/2012, 10:39
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Error en sentencia SELECT

Lo pude arreglar colocando la variable $avatar en comillas simples dentro de la consulta, asi:

$ssql = "SELECT * FROM usuario WHERE avatar_usuario = '$avatar'";

Pero se va por el else del if y me dice que no puede capturar la variable, creo que el problema esta en la sintaxis de la sentencia por que si le doy un valor que se encuentre escrito en la BD, asi:

$ssql = "SELECT * FROM usuario WHERE avatar_usuario = 'nombre'";

todo corre bien, entonces no se que hacer....
  #15 (permalink)  
Antiguo 11/07/2012, 10:40
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: Error en sentencia SELECT

hola

mira en el segmento de la linea te falta pasar el parametro de conexion

Código PHP:
Ver original
  1. $rs = mysql_query($ssql,$conexion);
  #16 (permalink)  
Antiguo 11/07/2012, 10:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error en sentencia SELECT

Cita:
Iniciado por yilloos Ver Mensaje
Lo pude arreglar colocando la variable $avatar en comillas simples dentro de la consulta, asi:

$ssql = "SELECT * FROM usuario WHERE avatar_usuario = '$avatar'";

Pero se va por el else del if y me dice que no puede capturar la variable, creo que el problema esta en la sintaxis de la sentencia por que si le doy un valor que se encuentre escrito en la BD, asi:

$ssql = "SELECT * FROM usuario WHERE avatar_usuario = 'nombre'";

todo corre bien, entonces no se que hacer....
La sintaxis de la sentencia es perfecta.
Lo que tienes que tener en cuenta es que SQL no es PHP, por lo que cuando una cadena de texto es comparada contra un campo VARCHAR de la tabla, debe siempre estar entre apóstrofos ('). No alcanza con poner la variable de PHP embebida en el SQL, eso lo que hace es agregar el valor de la variable a la cadena de la consulta, pero si no le pones los apóstrofos, si $avatar contiene "nombre", esto:
Código PHP:
Ver original
  1. $ssql = "SELECT * FROM usuario WHERE avatar_usuario = '$avatar'";
quedaría así:

Código SQL:
Ver original
  1. SELECT * FROM usuario WHERE avatar_usuario = nombre;
y eso para MySQL es que hay una columna cuyo nombre es "nombre", y no la cadena de texto "nombre".

Código SQL:
Ver original
  1. SELECT * FROM usuario WHERE avatar_usuario = 'nombre';
Si eso es lo que está pasando, MySQL te debe estar devolviendo un error no sintáctico.
¿Estás capturando y mostrando los errores devueltos por MySQL? No.
Es importante hacerlo, porque eso permite diferenciar entre los errores con la base de los errores de PHP.

Nota: Poner los apóstrofos hará que no se pueda determinar si la variable está llegando con datos. Si la variable $avatar está vacía, el resultado será una consulta así:
Código SQL:
Ver original
  1. SELECT * FROM usuario WHERE avatar_usuario = '';
Lo que no es un error de sintaxis, pero no te devolverá datos.
Eso es un error de programación en PHP y no un error de MySQL.

Antes que nada tienes que asegurarte fehacientemente que la variable contiene datos (longitud de caracteres mayor a cero), y no si está incializiada. El isset es insuficiente porque puede darte TRUE si contiene un caracter vacío.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 11/07/2012 a las 10:54
  #17 (permalink)  
Antiguo 11/07/2012, 10:52
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Error en sentencia SELECT

Ya lo solucione, era un error tonto

El problema era que estaba llamando la variable de sesión equivocada y en la comparación estaba llevando el nombre de usuario contra el avatar del mismo, me di cuenta por la corrección

Código PHP:
Ver original
  1. $rs = mysql_query($ssql) or die(mysql_error());

que me hiciste gjx2, muchas gracias y tambien a los demás que contestaron :D
  #18 (permalink)  
Antiguo 11/07/2012, 10:56
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Error en sentencia SELECT

Gracias gnzsoloyo

Me disculpo por mi ignorancia pero como hago para capturar los errores?
  #19 (permalink)  
Antiguo 11/07/2012, 11:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error en sentencia SELECT

Para eso sirven los manuales de referencia:
mysql_error()
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 11/07/2012, 11:13
 
Fecha de Ingreso: enero-2011
Mensajes: 16
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Error en sentencia SELECT

Okz muchas gracias

Etiquetas: mysql, select, sentencia, sql, variables, usuarios
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 22:37.