La sintaxis es más o menos correcta, pero como ya te dije, el signo "?" se usa dentro de procedimientos almacenados para ingresar parámetros a una
sentencia preparada, que es una estructura propia de los DBMS. En esos casos los parámetros se ingresan en el momento de enviarla a ejecución, y en el mismo orden en que los signos aparecen.
Además de ese detalle, no sé de dónde sale ese
Arrray(), porque no es una función de MySQL.
Yo supongo que la sentencia ha sido creada internamente para ser usada como
sentencia preparada, por lo que no puede ser extraída del módulo donde se incrusta, y el Array() en cuestión es parte de la invocación de la sentencia EXECUTE, que dispara la sentencia preparada.
SI lo que estás tratando de hacer es probar manualmente esa sentencia como SQL, tendrás que ajustarla en sintaxis.
Analizandola detalladamente, lo que resalta es este segmento:
Cita: AND m.created_at >= ?
AND m.created_at <= ?
AND m.updated_at >= ?
AND m.updated_at <= ?',
que no tiene ningún sentido lógico, a menos que uno sepa de qué valores está hablando y de qué tipo de datos maneja esa columna.
Lo que sí parece es que se tratase de obtener datos que caen en un rango de fechas... pero para eso ya existe la cláusula BETWEEN.
Para darte una mejor ayuda deberías postear la estructura de la tabla y decirnos qué es lo que la consulta debe obtener.
Creo que lo más cercano a lo que necesitas que ahora puedo darte sería algo así:
Código MySQL:
Ver original m.usuario_id
AS m__usuario_id
, m.receptor
AS m__receptor
, m.contenido
AS m__contenido
, m.created_at
AS m__created_at
, m.updated_at
AS m__updated_at
Estoy escribiendo el ejemplo con el uso de variables de usuario de MySQL.
Lo que habría que entender bien es si los valores de
@fechainicio y
@fechafin son iguales en ambos BETWEEN o no, ya que eso puede producir problemas de lógica.