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:
¿Por qué digo eso?
Porque lo que nos pones es así:
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í:
¿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
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é:
¿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.