[RESOLU] UPDATE imposible sur MySQL

Hiryu
[RESOLU] UPDATE imposible sur MySQL

Bonsoir à tous,

Mon problème concerne spécialement My SQL, c'est pour cela que j'ai jugé plus opportun de placé mon topic ici plutôt que dans PHP.

Il m'est impossible d'executer un update sur une de mes entrées.

tout d'abord il faut savoir que cette partie de code fonctionne:

$tableau[0] est du texte et vaut soit "vitesse", soit "force".
$tableau[3] est numerique.

elseif($tableau[0] == 'vitesse')
{
$vitesse = mysql_real_escape_string(htmlspecialchars($donnees['vitesse']));
$vitesse = $vitesse + $tableau[3];
mysql_query("UPDATE capacites SET vitesse = '$vitesse' WHERE pseudo = '$pseudo'") or die(mysql_error());
}

En revanche celle là qui est exactement la même mais ne cible pas le même champ ne marche pas.... d'où mon incompréhension :s

elseif($tableau[0] == 'force')
{
$force = mysql_real_escape_string(htmlspecialchars($donnees['force']));
$force = $force + $tableau[3];
mysql_query("UPDATE capacites SET force='$force' WHERE pseudo='$pseudo'") or die(mysql_error());
}

Je me suis donc dit il y a peut être un soucis avec PHP et suis allé dans PHPMyAdmin et ai rentré la requête directement en rentrant des valeurs arbitraires à la place de mes variables:

UPDATE capacites SET force='3' WHERE pseudo='pseudodemonchoix'

Et là:

MySQL a répondu:Documentation
#1064 - 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='3' WHERE pseudo='pseudodemonchoix'' at line 1

la structure de ma table: `force` int(11) NOT NULL

Malgrès toutes mes recherches je reste dans une impasse sur ce problème, j'éspère avoir apporté toutes les infos nécessaires pour que l'on puisse m'aider.

Je vous remercie.

Bonne soirée

fredericmazue

Quote:
la structure de ma table: `force` int(11) NOT NULL

Comme ça, à l'ampéropifomètre à ondulations modulées, je dirais que je n'aime pas le mot "force". Ca sent le mot clé ou le mot réservé.
Oui, je sais, ça n'en est pas un officiellement. Mais as tu essayé en renommant le champ dans la table en "la_force" par exemple ?

Hiryu

Je vous remercie de votre réponse. J'avoue avoir pensé à cette hypothèse car ayant été "obligé" d'utiliser des mots résérvés dans mes scripts pour optimiser le poids et la vitesse de mes scripts PHP (notamment lors de l'utilisation de la BDD). Maintenant je ne pensais pas que MySQL utilisait cette astuce.

En effet la modification de "force" par "puissance" résout tout le problème.

Toutefois il est dommage que rien ne renseigne de l'invalidité de l'utilisation d'un tel mot et plus encore le permette.

fredericmazue

Quote:
Maintenant je ne pensais pas que MySQL utilisait cette astuce

Je ne parlerais pas d'astuce là.... :D
Quote:
En effet la modification de "force" par "puissance" résout tout le problème.

J'en suis très heureux.

Quote:
Toutefois il est dommage que rien ne renseigne de l'invalidité de l'utilisation d'un tel mot et plus encore le permette.

AMHA rien ne renseigne parce que "force" est permis normalement. Dans le standard SQL c'est permis. Et si rien ne renseigne dans la doc MySQL c'est que "force" est permis... théoriquement.
Ce qui m'a mis la puce à l'oreille c'est que --force est une option en ligne de commande de MySQL (enfin je crois me souvenir, car ¤¤¤¤ MySQL je ne l'utilise pas beaucoup, lui préférant mille fois PostgreSQL si j'ai le choix)
Quel rapport entre "force" et --force demanderez vous ? Aucun.
Si ce n'est que vous êtes tombé sur un bug du compilateur de requête qui voit "force" comme un mot clé/réservé.
Ca mérite un rapport de bug je crois :)