Les Allergies
Alimentaires
Posez votre question Signaler

Erreur de syntaxe SQL près de... [Résolu]

kategriss 6Messages postés 1 avril 2008Date d'inscription - Dernière réponse le 4 avril 2008 à 11:24
Bonjour,
J'ai un petit problème avec une requête SQL
La voici
mysql_query("UPDATE persos
SET force='" . $force . "'
WHERE id_user='" . $_SESSION['id_user'] . "'")or die(mysql_error());

Je ne sais pas pourquoi elle me renvoir un message d'erreur de ce type :
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 'force='2' WHERE id_user='2'' at line 1
A savoir que j'ai une requête de même type dans ma page (voir ci dessous) et elle ne pose aucun problème.
mysql_query("UPDATE persos
SET pa='" . $pa . "'
WHERE id_user='" . $_SESSION['id_user'] . "'")or die(mysql_error());

Merci d'avance pour votre aide.
Lire la suite 

Erreur de syntaxe SQL près de »

6 réponses
Réponse
+1
moins plus
Bonjour,

Il me semble que FORCE peut être un mot réservé.
N'hésite pas à protéger tes noms de colonnes et de table en utilisant des `force`
(alt gr + 7)

Xavier
kategriss- 3 avril 2008 à 15:22
Merci !

C'était en effet ça, force était réservé alors j'ai mis forc à la place et ça marche très bien.

Par contre je suis encore un peu débutante en PHP/MySQL alors que veux-tu dire par
protéger tes noms de colonnes et de table en utilisant des `force` ?

Appliquer un mysql_real_escape_string et/ou un htmlspecialchars ne suffit pas ?

Merci encore :)
Reivax962- 3 avril 2008 à 17:42
Non non !
La « protection », c'est le fait de mettre des ` autour de tes noms de colonne !
Ce n'était pas la peine de renommer ta colonne, il suffisait d'écrire « `force` » au lieu de « force » à chaque fois que tu voulais utiliser cette colonne !

Enfin bon, l'important, c'est que ça fonctionne...
kategriss- 3 avril 2008 à 21:40
Ok !

Merci pour ton aide :)

La prochaine fois je me servirais de la protection mais cette fois-ci ce n'était pas gênant de renommer ma colonne ;)
Ajouter un commentaire
Réponse
+0
moins plus
C'est beau, c'est frai, ça sent le site web piratable à volonté.

Enfin bon, met un espace juste avant ton SET et juste avant ton WHERE pour voir si ça passe.
Reivax962- 4 avril 2008 à 11:24
Effectivement, comme le dit SebSauvage, ton site a de bonnes chances d'être ouvert aux injections SQL (forme de piratage très facile à mettre en oeuvre qui permet d'exécuter n'importe quelle requête sur ta base... Y compris des Drop Table !)
Enfin, tout dépend de comment tu as enregistré le user_id dans ta session.

Mais imagine qu'un utilisateur s'enregistre sous le nom : « '; DROP TABLE persos »
Nom bizarre, tu me diras, mais que devient alors ta requête telle qu'envoyée au serveur ?

mysql_query("UPDATE persos
SET force='" . $force . "'
WHERE id_user='" . $_SESSION['id_user'] . "'")or die(mysql_error());

devient

UPDATE persos SET force='12' WHERE id_user = ''; DROP TABLE persos

MySQL va donc voir, en fait, deux requêtes, dont la deuxième... détruit ta table !

Il faut IMPÉRATIVEMENT utiliser, comme tu l'évoques, mysql_real_escape_string :

mysql_query("UPDATE persos
SET force='" . $force . "'
WHERE id_user='" . mysql_real_escape_string($_SESSION['id_user']) . "'")or die(mysql_error());
Ajouter un commentaire
Ce document intitulé « Erreur de syntaxe SQL près de... » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?