Update, double quotes et simples quotes - PHP - Programmation
Marsh Posté le 02-03-2015 à 16:54:18
Parce que la 1ere requete ne fait qu'insérer des valeurs INT (entier) ou date. Dans ce cas pas de soucis.
Dans la 2eme, tu cherches à insérer du texte donc ca pose problème.
Pense à ajouter un addslashes devant $commentaire => addslashes($commentaire) au cas ou la chaine contient des guillemets doubles.
Ou mieux : htmlentities($commentaire, ENT_QUOTES) pour encoder les guillemets en html.
BOn courage
Marsh Posté le 03-03-2015 à 08:45:05
Merci pour le conseil mais j'avais déjà appliqué ces traitements aux variables concernées (je n'aime pas utiliser des fonctions de PHP dans mes requêtes SQL, je trouve qu'elles perdent ensuite en lisibilité).
Donc en résumé, il faut utiliser des doubles quotes chaque fois que l'on insère des champs textes dans une requête. J'imagine qu'une bonne pratique est d'y avoir systématiquement recours, peu importe le type de donnée rentrée, de manière à ne plus jamais être confronté à ce problème.
Marsh Posté le 03-03-2015 à 11:18:00
Non, il ne faut pas utiliser des doubles quotes non plus.
Tu veux faire planter ta requête ?
Insère le commentaire suivant:
Code :
|
Voilà comment tu peux faire plus proprement
Code :
|
Avec les valeurs de tests suivantes:
Code :
|
la première méthode donnera
Code :
|
Tout est donc bien échappé et pas de risques d'injection SQL ou de plantage de ta requête pour un simple ou double guillemet
La seconde fera la même chose mais en mieux.
Marsh Posté le 02-03-2015 à 16:40:32
Bonjour,
Aujourd'hui, en réalisant l'update de tables SQL, je me suis retrouvé confronté à un problème de syntaxe concernant l'update d'une seule colonne dans une table puis de plusieurs colonnes dans cette même table.
Dans les requêtes suivantes, le champ date est de type DATE, le champ commentaire est de type VARCHAR.
La première requête, utilisant des guillemets simples, fonctionne sans problèmes :
$result = $this->query('UPDATE nomTable SET date = '. $date .' WHERE id = '.$id.'');
Cette deuxième requête, utilisant elle aussi des guillemets simples, ne réalise pas l'update, il échoue :
$result = $this->query('UPDATE nomTable SET commentaire = '. $commentaire .', date = '. $date .' WHERE id = '. $id .'');
Après avoir cherché un certain temps, j'ai fini par utiliser des doubles quotes pour réaliser la concaténation, ce qui a résolu mon problème.
$result = $this->query('UPDATE nomTable SET commentaire = "'. $commentaire .'", date = "'. $date .'" WHERE id = '. $id .'');
Las questions que je me pose à présent sont :
Pourquoi la première requête fonctionne alors que la deuxième échoue ? Je devrais logiquement rencontrer les mêmes problèmes de syntaxe pour le champ date non ? Tout en sachant que, si je met des guillemets doubles au champ commentaire et que je laisse des guillemets simples pour le champ date dans la troisième requête, l'update de la date se fera alors à la valeur 0000-00-00.
Devrais-je réaliser la concaténation de ma première requête avec des guillemets doubles et, si oui, pourquoi ?
Voilà, c'est tout, d'avance merci à vous.