Problème mysql surprenant

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème mysql surprenant

par Rei Itchido » 29 juin 2005, 13:58

Merci pour ta réponse.

J'ai pas dit que j'etais pas d'accord avec toi hein, c'etait juste la reflexion que m'avait inspiré ton 1er post ;)

par albat » 29 juin 2005, 13:48

Je ne le prends pas mal du tout. :lol:
À peine... :tir2:


Ma réponse est très simple :
La syntaxe du SQL n'utilise pas d'apostrophes.

L'utilisation d'apostrophes est un artifice, une rustine,
une tolérance accordée par MySQL pour éviter
que les applis plantent quand un nom de champ/table est illicite.

D'autres SGBD utilisent des guillemets, par exemple.
Donc tu vois bien que c'est de la cuisine...

Le principe d'une tolérance est de ne pas en abuser.
Le mieux est même de ne jamais y avoir recours.

Tu conviendras, j'en suis sûr, qu'appeler un champ date est idiot.
1. Ce n'est pas plus difficile de le nommer date_creation, date_debut,...
2. C'est plus clair ! (pour le développement et la maintenance !)
3. Tu t'évites de t'emmêler les pinceaux avec des apostrophes
(le nombre de sujets postés sur ce forum pour des problèmes de syntaxe est à ce titre révélateur...)

À toi de voir... ;)

par Rei Itchido » 29 juin 2005, 12:08

Certains préconisent en effet l'usage systématique d'apostrophes pour les noms de champs et de tables.
L'intérêt est que cela ne provoque pas d'erreurs si ces noms :
- contiennent des espaces
- contiennent des caractères spéciaux (lettres accentuées,...)
- sont des mots réservés ("date", "match",...)

Au risque de passer pour un puriste (ce qui n'est pas un défaut !),
je considère que c'est de la bidouille.

La règle à laquelle je t'encourage est de n'utiliser que des noms valides,
c'est-à-dire qui ne reprennent pas des mots réservés, qui ne contiennent pas d'espaces,...

1. Ce n'est vraiment pas dur de trouver un nom valide.
2. Ça t'évitera d'utiliser des apostrophes et rendra ton code plus léger et plus lisible.
Ne le prend pas mal mais le bidouillage ce n'est pas justement de gérer ses noms de table comme ça?
Ce que je veux dire c'est qu'il vaut peut-être mieux, au contraire, adopter un usage systématique d'apostrophes pour que quelque soit le nom des tables (et les SGBD) ca fonctionne non?

par albat » 29 juin 2005, 08:12

Certains préconisent en effet l'usage systématique d'apostrophes pour les noms de champs et de tables.
L'intérêt est que cela ne provoque pas d'erreurs si ces noms :
- contiennent des espaces
- contiennent des caractères spéciaux (lettres accentuées,...)
- sont des mots réservés ("date", "match",...)

Au risque de passer pour un puriste (ce qui n'est pas un défaut !),
je considère que c'est de la bidouille.

La règle à laquelle je t'encourage est de n'utiliser que des noms valides,
c'est-à-dire qui ne reprennent pas des mots réservés, qui ne contiennent pas d'espaces,...

1. Ce n'est vraiment pas dur de trouver un nom valide.
2. Ça t'évitera d'utiliser des apostrophes et rendra ton code plus léger et plus lisible.

par Rei Itchido » 29 juin 2005, 00:14

On vient de me souffler dans l'oreil que match etait un mot reservé...
On m'a aussi soufflé "t'aurais pu y penser!" ^^

J'en profite pour demander : il vaut mieux tjs mettre ces `` alors non?

Problème mysql surprenant

par Rei Itchido » 29 juin 2005, 00:05

Bonjour à tous,

Je viens de rencontrer un pb vraiment inattendu et je vois pas du tout d'explication.

Pour info, ça m'est arrivé avec wamp5 donc PHP 5.0.4 et MySql 4.1.10a.

Dans une page, je fais une 1ère requête :

$req_joueur = mysql_query("SELECT * FROM joueur ORDER BY joueur_nom");

Là pas de pb.

Plus loin, je fais :

$req_match = mysql_query("SELECT * FROM match") or die(mysql_error());

Et là, erreur mysql "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 ''match'' at line 1".

Etant fatigué après une longue journée et une chaleur caniculaire, me suis dit que je devais faire une erreur toute bête comme me tromper dans le nom de la table. J'ai même relancé le serveur au cas où.

Mais après avoir cherché un moment, j'ai trouvé d'où venait le pb : je dois mettre FROM `match` et non FROM match pour que ça fonctionne

Ce que je comprends pas c'est que :
- c'est bien la 1ère fois que je rencontre cette erreur
- pourquoi il accepte ma 1ère requete (sans ``) et pas la 2ème? :shock:

Si quelqu'un a deja eu ce genre de problème...
Merci d'avance.