Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/07/2014, 18:18
Avatar de gnzsoloyo
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, 3 meses
Puntos: 2658
Respuesta: Problema al operar con fechas

Basicamente, como te lo comenta @oscurogt, es un problema de la forma en que creas la consulta.
Tu estás suponiendo que porque defines un tipo de variable de PHP como DATE, al incrustarla en la query esta tendrá el formato estándar de la base, y no es así. MySQL no entiende PHP, y por consecuencia no le llega la variable sino su conversión implícita a cadena.
El problema es que la conversión de la variable a una cadena de texto se hace según el formato del sistema, que no necesariamente es el mismo con que se creó dicha variable.
Ahora bien, tu problema se está produciendo, según supongo, por la forma en que estás creando la query, ya que aparentemente estás usando apostrofos para crear la cadena entera, pero apóstrofos y comillas no tienen el mismo uso en PHP que en MySQL.
Si no me equivoco, la query debe estas quedando construida de la siguiente forma:
Código MySQL:
Ver original
  1. SELECT * FROM tabla
  2. WHERE fecha > 2014-07-20 AND status = 1
  3. ORDER BY fecha ASC LIMIT 35
¿Por qué digo eso?

Porque lo que nos pones es así:
Cita:
'.$hoy.'
Ese tipo de encadenamiento me dice que la query la creas en PHOP con apóstrofos (') y no comillas (").
¿Es importante?
Si, es muy importante, porque MySQL para interpretar una cadena de texto como fecha debe recibirlo así:
Código MySQL:
Ver original
  1. SELECT * FROM tabla
  2. WHERE fecha > '2014-07-20' AND status = 1
  3. ORDER BY fecha ASC LIMIT 35
¿Ves cómo la fecha queda entre apóstrofos?
Bueno, cuando MySQL recibe eso en una comparación contra un campo DATE o DATETIME, hace una conversión implícita de la cadena a fecha. Pero si recibe algo como
Código MySQL:
Ver original
  1. SELECT * FROM tabla
  2. WHERE fecha > 2014-07-20 AND status = 1
  3. ORDER BY fecha ASC LIMIT 35
Lo que en realidad recibe es una comparación de un campo de fecha contra una operación aritmética de resta (2014-07-20 = 1986), y luego toma el resultado y lo convierte en fecha... lo que sería el 1986-01-10...

La solución es simple: debes convertir en la query, la fecha en una cadena de texto entendible para MYSQL como tal, que respete el formato de fecha estandar de la base.
Es decir, la query que MySQL debe recibir es la que ya te mencioné:

Código MySQL:
Ver original
  1. SELECT * FROM tabla
  2. WHERE fecha > '2014-07-20' AND status = 1
  3. ORDER BY fecha ASC LIMIT 35

¿Se entiende la idea?

No te pongo el código PHP porque programación es OFF-TOPIC en este foro, y tema a resolver en el foro de PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)