Veamos. El tema es saber cómo están guardadas las fechas en la tabla y cómo es la forma que tiene la fecha en la variable.
Las fechas para ser consideradas como tales para MySQL deben ser, por ejemplo:
1) "2010-12-31 23:59:59" (DATETIME)
2) "2010-12-31" (DATE)
Por ende, las variables tienen que tener la misma forma.
Entonces, si los datos fuesen así, la consulta, para responder bien debería ser:
Si $fecha es un DATE, no importa, de todos modos convertir a DATE() un DATE da un DATE.
Ahora bien, si la fecha está entrando "31/12/2010 23:59:59", la cosa cambia. Hay que usar dos funciones: STR_TO_DATE y DATE;
En cambio, si entra "31/12/2010" solamente habría que usar una:
Nota: Es importante en el
pattern poner correctamente el símbolo de separación de dia/mes/año. Para MySQL no es lo mismo usar "/" que "-". Si pones el incorrecto dará NULL.