2010-09-02 11 views
0

Il doit y avoir quelque chose de petit qui me manque ici, mais je ne le trouve pas pour la vie de moi.Erreur de syntaxe MySQL Insert - Impossible de le trouver!

$insert = mysql_query("INSERT INTO USERS 
(`FBID`, `FIRST_NAME`, `LAST_NAME`, `GENDER`) 
VALUES ('$fbid', '$firstName', '$lastName', '$gender')"); 

L'erreur est:

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 '1' at line 1

Toutes les idées?

+3

Essayez écho à votre chaîne SQL pour voir ce que vous passer dans 'mysql_query'. –

+0

Sont-ils censés être des guillemets simples ('' ') d backticks (') dans l'instruction SQL? –

+0

Existe-t-il un moyen de consigner la requête ACTUAL? C'est, celui où les variables sont remplies? Si vous n'avez pas échappé à ces valeurs, vous aurez des problèmes (que se passe-t-il si l'une de ces variables contient une seule citation?). –

Répondre

0

Est-ce que l'un de vos noms contient des guillemets simples? Essayez d'écrire la valeur de la requête sur log/console/debug pour vous assurer que c'est ce que vous attendez.

2

Vous n'avez pas de variables correctement échappées. Utilisez mysql_real_escape_string et code comme ceci:

$insert = mysql_query("INSERT INTO USERS (`FBID`, `FIRST_NAME`, `LAST_NAME`, `GENDER`) 
    VALUES (
      '".mysql_real_escape_string($fbid)."', 
      '".mysql_real_escape_string($firstName)."', 
      '".mysql_real_escape_string($lastName)."', 
      '".mysql_real_escape_string($gender)."' 
     )"); 

Si les variables contiennent des guillemets, ils créent le problème si vous n'echappe pas correctement.

+0

Merci pour les suggestions. J'ai tout essayé, mais continue d'avoir l'erreur. Bien que la requête s'exécute correctement et autre que le message d'erreur, il n'y a aucun problème. – SteveMack

+1

@Steve: si votre requête s'exécute correctement, les données sont insérées mais MySQL se plaint encore d'une erreur de syntaxe, alors l'erreur de syntaxe doit être sur une autre requête. – BoltClock

0

Essayez d'envelopper vos variables dans {}.

'{$fbid}', '{$firstName}', '{$lastName}', '{$gender}' 

Sinon, vous devrez utiliser la concaténation de chaîne. ' ". FBID $"', ' ". Prenom $"', ' » ...

Je suppose que vos variables contiennent déjà des données appropriée se sont échappés

+0

Il construit une chaîne entre guillemets. Les variables vont interpoler très bien dans cela. Vous n'avez besoin des accolades que si vous avez du texte immédiatement après une variable qui pourrait être confondue avec la variable '$ x = 1; $ y = "$ x23" 'ne vous donnera pas' 123', ou si vous avez besoin d'accéder à des niveaux supplémentaires d'un tableau multidimensionnel dans la chaîne. '$ x [0] [1]' est interprété comme $ x [0]. '[1]'. –

0

Essayez de le faire comme ça.:

$sql = <<EOL 
INSERT INTO USERS (`FBID`, `FIRST_NAME`, `LAST_NAME`, `GENDER`) 
VALUES ('$fbid', '$firstName', '$lastName', '$gender') 
EOL; 
$stmt = mysql_query($sql) or die("MySQL error: " . mysql_error()); 

Cela permettra de préserver la requête pour vous dans $sql afin que vous puissiez l'écho dehors ailleurs et voir ce qui a été produit.