Ver Mensaje Individual
  #4 (permalink)  
Antiguo 30/12/2009, 17:00
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, 1 mes
Puntos: 2658
Respuesta: Error #1064 al hacer una consulta SQL

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
  1.     m.id AS m__id,
  2.     m.usuario_id AS m__usuario_id,
  3.     m.receptor AS m__receptor,
  4.     m.tipo AS m__tipo,
  5.     m.titulo AS m__titulo,
  6.     m.contenido AS m__contenido,
  7.     m.estado AS m__estado,
  8.     m.created_at AS m__created_at,
  9.     m.updated_at AS m__updated_at
  10. FROM mensaje m
  11. WHERE m.titulo LIKE @patron
  12.     AND (m.created_at  BETWEEN @fechainicio AND @fechafin)
  13.     AND (m.updated_at BETWEEN @fechainicio AND @fechafin);
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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 30/12/2009 a las 17:07