2010-07-13 7 views
-2

Je suis en train de modifier une entrée de la base de données avec PHP, mais est coincé avec ce message d'erreur:MySQL "une erreur dans votre syntaxe SQL"

Error: 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 'Bjelkholm Lövgren AND adress = Brinellgatan 14 AND postnummer = 57135 ' at line 1

code:

$namn = sanitize($_GET['namn']); 
$adress = sanitize($_GET['adress']); 
$postnummer = sanitize($_GET['postnummer']); 
$postort = sanitize($_GET['postort']); 
$email = sanitize($_GET['email']); 
$status = 0; 
$sql="UPDATE ordrar SET namn = $namn AND adress = $adress AND postnummer = $postnummer 
AND postort = $postort AND email $email AND status = $status WHERE email = $email"; 
if (!mysql_query($sql)) 
{ 
    die('Error: ' . mysql_error()); 
} 

Merci pour des réponses. /Victor

+0

Qu'est-ce que la fonction désinfecte() faire? –

+0

colonel Shrapnel, nettoie la variable à partir du code mal. –

+0

Je crains qu'il n'y ait pas de « code mal » à nettoyer. Peut-être que cette fonction fait quelque chose indésirable et inutile. –

Répondre

3
  1. delimiter valeurs instruction SET est une virgule, pas ET
  2. valeurs de chaîne doivent être cités

Pour faire des déclarations SET, il serait bien d'utiliser une petite fonction

function dbSet($fields) { 
    $set=''; 
    foreach ($fields as $field) { 
    if (isset($_POST[$field])) { 
     $set.="`$field`='".mysql_real_escape_string($_POST[$field])."', "; 
    } 
    } 
    return substr($set, 0, -2); 
} 

et que juste

$table = "ordrar"; 
$email = mysql_real_escape_string($_POST['email']); 
$fields = explode(" ","namn adress postnummer postort email status"); 
$query = "UPDATE $table SET ".dbSet($fields)." WHERE email='$email'"; 

vous apportera une requête correctement formatée

Cependant, l'utilisation de l'e-mail pour l'identification des lignes est mauvaise. Je suggérerais d'utiliser un champ d'identification auto-incrémenté pour identifier vos enregistrements au lieu de l'email.

1

citation vos variables (à savoir adresse = 'adresse $)

0

Si l'on suppose ces valeurs sont des chaînes, vous devez les citer dans votre chaîne de requête, plus vous manque le signe égal lorsque l'on compare l'e-mail.

$sql="UPDATE ordrar SET namn = '$namn' AND adress = '$adress' AND postnummer = '$postnummer' 
AND postort = '$postort' AND email = '$email' AND status = '$status' WHERE email = '$email'"; 
0

choses Couple:

  • Vos chaînes doivent être citées (et échappé).
  • Il vous manque un = pour l'e-mail dans la clause SET.
0

La réponse courte est que vous avez un tas d'erreurs de syntaxe. Tout d'abord, vous devrez citer correctement les noms et les valeurs de vos colonnes. Les noms de colonne obtiennent une tombe (citation latérale) et les valeurs obtiennent une citation simple normale. Et deuxièmement, vous avez manqué un signe égal avant la variable $ email. Je pourrais aussi suggérer de le diviser en plusieurs lignes; cela aide à faciliter le débogage.

$sql="UPDATE `ordrar` 
    SET `namn` = '$namn' AND 
    `adress` = '$adress' AND 
    `postnummer` = '$postnummer' AND 
    `postort` = '$postort' AND 
    `email` = '$email' AND 
    `status` = '$status' 
    WHERE `email` = '$email'"; 

Une dernière suggestion, envisager binding your parameters using prepared statements par opposition à l'interpolation de chaîne. Ils sont plus sûrs, et je les trouve personnellement plus faciles à écrire.

+0

ce que le diable mauvaise réponse acceptée? –

0

$ name = sanitize ($ _ GET [ 'nom']);

adresse $ = sanitize ($ _ GET [ 'adresse']);

$ = désinfectent le code postal ($ _ GET [ 'code postal']);

ville $ = sanitize ($ _ GET [ 'ville']);

$ email = sanitize ($ _ GET [ 'email']);

$ status = 0;

$ sql = « commandes UPDATE SET name = '$ name' adresse = '$ address', Code postal = '$ code postal', ville = '$ city', email = '$ email' , statut = '$ status' OU email = '$ email « ';

si (mysql_query (de $ sql)) { die ('Erreur' mysql_error().); }

essayer. Espoir son travail bien ;-)

Questions connexes