Foros del Web » Programando para Internet » PHP »

You have an error in your SQL syntax; check the manual that corresponds to your MySQ

Estas en el tema de You have an error in your SQL syntax; check the manual that corresponds to your MySQ en el foro de PHP en Foros del Web. Hola, tengo un problema en la consulta con php y un implode, el error es este: Código HTML: Error en : You have an error ...
  #1 (permalink)  
Antiguo 28/09/2012, 09:51
Avatar de ananda  
Fecha de Ingreso: enero-2012
Mensajes: 345
Antigüedad: 12 años, 3 meses
Puntos: 14
You have an error in your SQL syntax; check the manual that corresponds to your MySQ

Hola, tengo un problema en la consulta con php y un implode, el error es este:

Código HTML:
Error en : 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 ') || usuario='93') ORDER BY acciones DESC' at line 1
Esta es línea de la consulta:

Código PHP:
$popu=mysql_query("SELECT * FROM publicaciones WHERE (fecha BETWEEN '".mysql_real_escape_string($hoy)."' AND CURRENT_TIMESTAMP) && (usuario in (".implode(',',$UL).") || usuario='".mysql_real_escape_string($idsesion)."') ORDER BY acciones DESC ")or die( "Error en $consulta: " mysql_error() );; 
Sé que el problema está aquí: usuario in (".implode(',',$UL).")

El problema es que no sé como escribir un implode en la consulta si no es de este modo, lo curioso del problema es que luego tengo un if que depende de esta consulta y funciona perfectamente, a ver si me podéis ayudar con esta consulta!
  #2 (permalink)  
Antiguo 28/09/2012, 10:09
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

No se muy bien pero yo creo que sobra el parentesis de (fecha BETWEEN y tambien el de (usuario in ("

Haz un hecho de $popu a ver que sale.

echo $popu; exit;

Usando sprintf te puedes hacer los implode y mysql_real_strings mucho más fácil. Ejemplo de uso sacado de php.net
Código PHP:
$num 5;
$location 'tree';

$format 'There are %d monkeys in the %s';
echo 
sprintf($format$num$location); 
  #3 (permalink)  
Antiguo 28/09/2012, 13:43
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

mejor que te muevan a bases de datos
  #4 (permalink)  
Antiguo 28/09/2012, 13:52
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: You have an error in your SQL syntax; check the manual that corresponds to

Código MySQL:
Ver original
  1. FROM publicaciones
  2.     (fecha BETWEEN '".mysql_real_escape_string($hoy)."' AND CURRENT_TIMESTAMP)
  3.     &&
  4.     (usuario in (".implode(',',$UL).")
  5.     ||
  6.     usuario='".mysql_real_escape_string($idsesion)."')
  7. ORDER BY acciones DESC

Consejos básicos:
1) No uses && o || Por más que el MySQL te los reconozca, no son buena práctica porque pueden tender a confundirse en el momento de analizar la sintaxis de la consulta, especialmente cuando andas mezclando PHP con SQL (que no son la misma cosa). Usa AND y OR según corresponda, al menos en el SQL.
2) mysql_real_escape_string() puede ser una buena idea para manipular los datos en PHP, pero dar resultados desastrosos al momento de crear la consulta. En este caso lo único que necesitas es convertir el contenido de $hoy en una cadena con el formato '0000-00-00', que es lo que MySQL reconocerá como fecha.
3) CURRENT_TIMESTAMP es parte de MySQL, pero es mejor usar CURDATE() para ese uso. Además, las funciones de ese tipo tienen que llevar sus paréntesis o no se las reconoce como tales (y los paréntesis no deben tener espacios entre el nombre de la función y el paréntesis).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: manual, mysql, sql, syntax, usuarios, checked
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 04:55.