8792 sujets

Développement web côté serveur, CMS

bonjour,
Je deviens fou...
sql me retourne une erreur de syntaxe sur un INSERT , quand une de mes variables contient des guillemets.... voici l'insert :

$sql = 'INSERT INTO table VALUES ("", "'.$idm.'", "'.addslashes($nam).'", "'.addslashes($ema).'", "'.addslashes($adr).'", "'.addslashes($zip).'", "'.addslashes($cou).'", "'.$fa1.'", "'.$fa2.'", "'.$fb1.'", "'.$fb2.'", "'.$pla.'", "'.$cha.'", "'.$rev.'", "'.addslashes($otc).'", "'.$mp3.'" )';

les varaible sans addslashes sont des entiers ou boleen, celles avec, des chaines de caractères...et ç'est là qu'il y a probleme. Je ne specifie pas à sql les champs à remplir car il correspondent toujours au nb de collonnes (pas de pb de ce coté là)

je ne sais pas pourquoi il interprète les guillemets comme un delimiteur, à l'aide, merci!
Modifié par lebio (08 Feb 2007 - 18:26)
c'est bon j'ai trouvé...ça marche nickel en inversant les quotes..(doubles et simples)
voici le code ok ...

$sql = "INSERT INTO table VALUES ('', '".$idm."', '".addslashes($nam)."', '".addslashes($ema)."', '".addslashes($adr)."', '".addslashes($zip)."', '".addslashes($cou)."', '".$fa1."', '".$fa2."', '".$fb1."', '".$fb2."', '".$pla."', '".$cha."', '".$rev."', '".addslashes($otc)."', '".$mp3."' )";

Bon, on m'a toujours dit qu'il fallait encapsuler les requêtes avec des simples quotes...non?
Modifié par lebio (08 Feb 2007 - 18:24)
Salut.

J'ai pas eu le courage de tout vérifier, mais a priori ça ne devrait rien changer si tu as bien concaténé ta chaîne.

La seule différence, c'est qu'entre les simples guillemets, PHP considère tout ce que tu tapes comme une chaîne de caractères, tandis qu'entre les guillemets doubles, il recherche les variables et les remplace par leur valeur. Par exemple :
$pouet = 'N\'importe quoi';
$var = 'C\'est vraiment $pouet';
echo $var;
// Résultat affiché : [b]C'est vraiment $pouet[/b]

$var = "C'est vraiment $pouet";
echo $var;
// Résultat affiché : [b]C'est vraiment n'importe quoi[/b]
En utilisant les simples quotes systématiquement, tu devrais gagner en performances, PHP n'ayant pas besoin d'interpréter le contenu de la chaîne ...
tu peux utiliser mysql_escape_string() ou mysql_real_escape_string() pour traiter tes chaines en vue d'une insertion dans ta requète.

Vala !