2011-10-09 5 views
1

J'ai un tableau préconstruit créé à partir de certaines données de test car je n'ai pas encore configuré un formulaire de publication. Le tableau ressemble à ceci:Erreur de syntaxe MySQL - Array to Query

$ud = array('name' => 'name', 'username' => 'username', 'password' => 'password', 'location' => 'london', 'platform' => 'mobile', 'developer_or_designer' => 'developer', 'tags' => 'hello', 'paypal_email' => '[email protected]', 'developer_or_client' => 'developer', 'email' => '[email protected]'); 

foreach ($ud as $key => $value) { 
    $value = mysql_real_escape_string($value); 
} 

A partir de ce tableau, j'essaie alors d'insérer les données via une requête MySQL dans ma base de données:

$query = mysql_query("INSERT INTO `Developers` (`Name`,`Email`,`Username`,`Password`,`Location`,`Platform`,`Developer_or_Designer`,`Tags`, `Paypal_Email`) VALUES (" . $ud['name'] . ", " . $ud['email'] . ", " . $ud['username'] . ", " .$ud['password'] . ", " . $ud['location'] . ", " . $ud['platform'] . ", " . $ud['developer_or_designer'] . ", " . $ud['tags'] . ", " . $ud['paypal_email'] . ")") or die(mysql_error()); 

Cependant, il meurt avec l'erreur suivante:

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 '@email.com, username, password, london, mobile, developer, hello, [email protected])' at line 1

Pouvez-vous me dire où je me trompe?

Répondre

1

Vous devez guillemets autour de chaque valeur dans parenthases

0
$query = mysql_query("INSERT INTO `Developers` (`Name`,`Email`,`Username`,`Password`,`Location`,`Platform`,`Developer_or_Designer`,`Tags`, `Paypal_Email`) VALUES ('" . $ud['name'] . "', '" . $ud['email'] . "', '" . $ud['username'] . "', '" .$ud['password'] . "', '" . $ud['location'] . "', '" . $ud['platform'] . "', '" . $ud['developer_or_designer'] . "', '" . $ud['tags'] . "', '" . $ud['paypal_email'] . "')") or die(mysql_error()); 

l'essayer :)

0

Des sons des noms de colonne ceux-ci sont varchar types de colonnes de sorte que vous devez envelopper vos valeurs avec des guillemets:

$query = mysql_query("INSERT INTO `Developers` (`Name`,`Email`,`Username`,`Password`,`Location`,`Platform`,`Developer_or_Designer`,`Tags`, `Paypal_Email`) VALUES ('" . $ud['name'] . "', '" . $ud['email'] . "', '" . $ud['username'] . "', '" .$ud['password'] . "', '" . $ud['location'] . "', '" . $ud['platform'] . "', '" . $ud['developer_or_designer'] . "', '" . $ud['tags'] . "', '" . $ud['paypal_email'] . "')") or die(mysql_error()); 

De plus, si les valeurs proviennent d'une entrée utilisateur, vous devez exécuter chaque valeur via mysql_real_escape_string pour éviter les erreurs SQL. attaques par injection

+0

S'il vous plaît vérifier la mise à jour. –

+0

Vous devez toujours les guillemets, 'sanitize de mysql_real_escape_string' s l'entrée mais n'ajoute pas les guillemets nécessaires pour que la requête soit valide – Clive

+0

Aussi si vous voulez que 'mysql_real_escape_string' ait un effet, vous devez accéder à la valeur par référence:' foreach ($ ud as $ key => & $ value) {'... – Clive

1

Deux choses:

  1. As Jeff notes, vous devez mettre des guillemets autour des chaînes. Avant de placer des guillemets autour d'eux, vous devez passer chaque chaîne à travers mysql_real_escape_sring().
+0

Je cours mysql_real_escape_string avant –

0

Voir ceci:

VALEURS ("$ ud [ 'nom'].".,

Nedd que:

VALUES ('. » $ Ud [ 'nom'] . « »,

Et pour d'autres colonnes aussi (si n'est pas: numérique),