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

Por que no funciona así...

Estas en el tema de Por que no funciona así... en el foro de Mysql en Foros del Web. Estoy haciendo una consulta en una base de datos y asi funciona: $recorro="SELECT * FROM detallehorario WHERE idaula=5 AND cuatrimestre= 'primero' "; pero así no: ...
  #1 (permalink)  
Antiguo 12/11/2010, 03:13
 
Fecha de Ingreso: junio-2009
Mensajes: 30
Antigüedad: 14 años, 10 meses
Puntos: 0
Por que no funciona así...

Estoy haciendo una consulta en una base de datos y asi funciona:

$recorro="SELECT * FROM detallehorario WHERE idaula=5 AND cuatrimestre= 'primero' ";

pero así no:

$recorro="SELECT * FROM detallehorario WHERE idaula=$idaula AND cuatrimestre= $cuatrimestre ";

idaula y cuatrimestre son nombres de campo y las variables tienen el valor indicado.

No veo que puedo hacer mal.
Saludos y gracias.
  #2 (permalink)  
Antiguo 12/11/2010, 03:28
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: Por que no funciona así...

Porque el campo denominado `cuatrimestre` en esa tabla es un campo de tipo VARCHAR o CHAR, por tanto la comparación debe ser realizada contra una cadena de texto; como las cadenas de texto sólo se pueden poner entre apóstrofes, la sentencia una vez construida, dentro de la variable, debe quedar así:
Código MySQL:
Ver original
  1. SELECT * FROM detallehorario WHERE idaula=5 AND cuatrimestre= 'primero'
En el segundo ejemplo, estás omitiendo los apóstrofes que deben encerrar el contenido de la variable $cuatrimestre, entonces, suponiendo que contenga "segundo", la sentencia, una vez creada dice:
Código MySQL:
Ver original
  1. SELECT * FROM detallehorario WHERE idaula=5 AND cuatrimestre= segundo
En ese contexto, segundo no es una cadena de texto, sino que el parser lo interpreta como el nombre de un objeto de base de datos, tal como un columna, una tabla o algo así.

Conclusión: corrige tu PHP para que esté escrito algo así:
Código PHP:
Ver original
  1. $recorro="SELECT * FROM detallehorario WHERE idaula=$idaula AND cuatrimestre= '$cuatrimestre'";
de modo que cuando quede armada, la sentencia tenga el valor de la variable contenido entre apostrofes.

Tip final: DEben quedar entre apóstrofes todos los valores de cadenas de caracteres, fechas, horas y fechahoras. No los valores numéricos, que se interpretan como tales perfectamente.
__________________
¿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 12/11/2010, 04:52
 
Fecha de Ingreso: junio-2009
Mensajes: 30
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Por que no funciona así...

Gracias mil, rapido y claro.
Un saludo.

Etiquetas: Ninguno
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 07:00.