Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Error #1064 al hacer una consulta SQL

Estas en el tema de Error #1064 al hacer una consulta SQL en el foro de Bases de Datos General en Foros del Web. Hola, tengo la siguiente consulta SQL: Código: SELECT m.id AS m__id, m.usuario_id AS m__usuario_id, m.receptor AS m__receptor, m.tipo AS m__tipo, m.titulo AS m__titulo, m.contenido AS ...
  #1 (permalink)  
Antiguo 30/12/2009, 15:08
 
Fecha de Ingreso: septiembre-2008
Mensajes: 146
Antigüedad: 15 años, 8 meses
Puntos: 1
Error #1064 al hacer una consulta SQL

Hola,

tengo la siguiente consulta SQL:
Código:
SELECT m.id AS m__id, m.usuario_id AS m__usuario_id, m.receptor AS m__receptor, m.tipo AS m__tipo, m.titulo AS m__titulo, m.contenido AS m__contenido, m.estado AS m__estado, m.created_at AS m__created_at, m.updated_at AS m__updated_at FROM mensaje m WHERE m.titulo LIKE ? AND m.created_at >= ? AND m.created_at <= ? AND m.updated_at >= ? AND m.updated_at <= ?', array('%ya%', 'month' => '1', 'day' => '1', 'year' => '2007')
Y me dal el siguiente error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AND m.created_at >= ? AND m.created_at <= ? AND m.updated_at >= ? AND m.update' at line 1

Código:
Field 	Type 	Null 	Default 	Links to 	Comments 	MIME
id 	bigint(20) 	No  	  	  	  	 
usuario_id 	int(11) 	Yes  	NULL  	sf_guard_user -> id  	  	 
receptor 	int(11) 	Yes  	NULL  	  	  	 
tipo 	tinyint(4) 	Yes  	NULL  	  	  	 
titulo 	varchar(100) 	Yes  	NULL  	  	  	 
contenido 	text 	Yes  	NULL  	  	  	 
estado 	tinyint(1) 	Yes  	NULL  	  	  	 
created_at 	datetime 	Yes  	NULL  	  	  	 
updated_at 	datetime 	Yes  	NULL
Alguna idea?

Un saludo

Javi
  #2 (permalink)  
Antiguo 30/12/2009, 15:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error #1064 al hacer una consulta SQL

Bueno, es que esto:
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 ?
  12.     AND m.created_at >= ?
  13.     AND m.created_at <= ?
  14.     AND m.updated_at >= ?
  15.     AND m.updated_at <= ?',
  16.     array (%ya%, 'month' => '1', 'day' => '1', 'year' => '2007');
no cumple con la sintaxis de MySQL, entre otras cosas porque el símbolo "?", sólo se usa como parámetro de entrada para sentencias preparadas, y no nos estás poniendo el entorno real de uso de la sentencia...
Además de eso, no existe ninguna función que yo conozca en MySQL denominada ARRAY(), por lo que eso no corresponde.
¿En qué contexto se usa? ¿Con programación o en un SP?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 30/12/2009, 15:29
 
Fecha de Ingreso: septiembre-2008
Mensajes: 146
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Error #1064 al hacer una consulta SQL

Hola gnzsoloyo,

gracias por la info. Es una sentencia que me ha generado symfony (un framework de PHP). Junto con él estoy usando Doctrine (ORM) y una base de datos MySQL.

¿Que tipo de sentencia puede ser (me refiero a la sentencia que pegue en mi primer post y que pensaba que era de tipo SQL)?

Un saludo

Javi

Última edición por tirengarfio; 30/12/2009 a las 16:05
  #4 (permalink)  
Antiguo 30/12/2009, 17:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:21.