Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] #1064 - You have an error in your SQL syntax

Estas en el tema de #1064 - You have an error in your SQL syntax en el foro de PHP en Foros del Web. Hola buenas gente, pues tengo un problema a la hora de hacer un DELETE. #1064 - You have an error in your SQL syntax; check ...
  #1 (permalink)  
Antiguo 22/11/2014, 13:47
 
Fecha de Ingreso: diciembre-2012
Ubicación: Murcia
Mensajes: 329
Antigüedad: 11 años, 4 meses
Puntos: 4
#1064 - You have an error in your SQL syntax

Hola buenas gente, pues tengo un problema a la hora de hacer un DELETE.

#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 ' product_id IN ('126,127')' at line 1

Recojo los datos del check de unos checkbox
y el userid de un campo oculto con valor al id del correspondiente usuario.

Código PHP:
$userid $_POST['userid'];
$check $_POST['seleccion'];
$ids implode(','$check);

mysql_query("DELETE FROM user_badges WHERE user_id='".$userid."', product_id IN ('".$ids."')") or die(mysql_error()); 
Si me podrían echar una mano, se lo agradecería.
  #2 (permalink)  
Antiguo 22/11/2014, 14:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: #1064 - You have an error in your SQL syntax

Digo fuera de que tienes un grave problema propenso de SQL inyection, el problema es que te falta un AND en tus condiciones para borrar, ejemplo:
Código SQL:
Ver original
  1. DELETE FROM `foo` WHERE `bar`='baz' AND `bat`=`bar`
  #3 (permalink)  
Antiguo 22/11/2014, 15:15
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, 4 meses
Puntos: 2658
Respuesta: #1064 - You have an error in your SQL syntax

Adicionalmente a eso, hay un error de construcción que se percibe en el mensaje de error.
Cuando poner un IN(), los valores deben quedar separados por comas, pero no de esta forma:
Código SQL:
Ver original
  1. DELETE FROM user_badges
  2. WHERE user_id='23' AND product_id IN ('126, 127')
Esa sintaxis asume que PRODUCT_ID es un campo VARCHAR que contendrá valores como "126,127", es decir una cadena de texto con los dos números con una coma intermedia, y francamente no creo que sea el caso.

Quítale los apóstrofos...

Consejo: Los valores números no necesitan apóstrofos cuando los pones en SQL, a menos que sea para comparar contra campos VARCHAR.

La sintaxis correcta asía:
Código PHP:
Ver original
  1. mysql_query("DELETE FROM user_badges WHERE user_id = ".$userid." AND product_id IN (".$ids.")") or die(mysql_error());
que podrá dar un resultado mas o menos así (es un ejemplo imaginario):
Código SQL:
Ver original
  1. DELETE FROM user_badges
  2. WHERE user_id = 23 AND product_id IN (126, 127)

Eso podrá hacer que si un valor no está llegando en una de as variables a la query se dispare un error de sintaxis, pero ese error te puede indicar precisamente que hay una variable vacía... Lo que es bueno para depurar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 22/11/2014, 16:07
 
Fecha de Ingreso: diciembre-2012
Ubicación: Murcia
Mensajes: 329
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: #1064 - You have an error in your SQL syntax

Si así es le faltaba el AND

Asi fue como quedo y por el momento funciona de maravilla. muchas gracias a los 2
Código PHP:
$check $_POST['seleccion'];
            foreach (
$check as $value){
                
mysql_query("DELETE FROM user_badges WHERE user_id= '".$userid."' AND badge_id='".$value."'") or die(mysql_error());
            } 

Etiquetas: mysql
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 11:38.