guillemets dans les rêquetes SQL

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 : guillemets dans les rêquetes SQL

par Snipy » 10 janv. 2008, 18:32

Mon topic était déja en résolu :shock:

par zeus » 10 janv. 2008, 00:35

Modération :
Snipy, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par Snipy » 09 janv. 2008, 23:23

On peut dire ça :)

par Berzemus » 09 janv. 2008, 23:05

Ah ben voilà.. résolu ?

par Snipy » 09 janv. 2008, 21:55

ok j'ai pu trouver l'erreur, très vicieuse en tout cas.

ils 'avérait qu'il y avait un espace devant le nom de la table.
Et bien entendu dans la liste des tables dans la colonnes de gauches les espaces ne sont pas pris en compte donc je ne pouvais pas le voir.
C'est en exportant ma table pour vérifier que j'ai vu cela

` phpl_ordres`


Une semaine pour un problème d'espace....

Merci à tous ;)

par Berzemus » 09 janv. 2008, 21:11

Oui je sais, mais dés qu'il est prévu comme spécial quelque part, mieux vaut sortir couvert et éviter :wink:

A moins de vouloir se farcir toute la doc sql.. :?

par Xenon_54 » 09 janv. 2008, 20:59

Le underscore est considéré comme un wildcard en mysql (équivalent au %) (petit lien). Ca vient sans doute de la..
Peut-être dans un LIKE mais pas dans les noms de tables ou champs.

par Snipy » 09 janv. 2008, 20:47

50% de mes tables commencent par phpl_*** et pourtant avant je n'ai jamais eu ce problème :roll:

Peut être ma table qui a été mal créé ? (mauvaise propriété?)

Je vais regarder de ce coté la.

par Berzemus » 09 janv. 2008, 11:01

Le underscore est considéré comme un wildcard en mysql (équivalent au %) (petit lien). Ca vient sans doute de la..

par Snipy » 09 janv. 2008, 10:27

J'ai bien compris l'interet des guillemets arrières... :)
Mais je comprends pas pourquoi pour ce nom de table j'en ai besoin?

phpl_ordres
Aucun chiffre ou caractère spécial, je pense pas que ce nom soit réservé à Mysql ? :shock:

par zeus » 09 janv. 2008, 08:55

Effectivement, le "guillemetage arrière" est propre à MySQL parce que ce SGBD permet des fantaisie non normalisées dans les noms de tables et de champs (chiffres, espaces, ...)

Et que ce guillemetage arrière est une juste une rustine qui permet de rattraper cette co**erie.
Si PMA utilise toujours les backquotes, c'est pour ne pas avoir a tester si les champs sont "valides" ou non.

Selon moi, pour avoir de bonnes pratiques, il vaut mieux nommer correctement ses tables et ses champs que de recourir à cette astuce ;)

par Xenon_54 » 09 janv. 2008, 04:22

Idéalement, il vaut mieux échapper ses noms de tables et champs avec le guillemetage arrière. Il s'agit d'une syntaxe incluse à MySQL et non un truc "propre" à phpMyAdmin.

Cela permet d'éviter certains problèmes avec des noms de tables/champs pas toujours recommendables. (chiffres, mots réservés, etc.)

par Hywan » 09 janv. 2008, 00:49

Normalement, on place des guillemets autour des chaînes de caractères (comme des noms de tables, des valeurs de champs etc.) si jamais il y a un espace, un caractère spécial, un mot réservé ou des choses du genre. Le back-quoting (ça existe ce terme ? :P) ... le guillemetage arrière — merci l'académie française — est assez spécifique à PhpMyAdmin. En effet, il n'est pas obligatoire dans SQL. Pour ce qui est de MySQL, je ne sais pas.
Comme ton nom de table contient un chiffre, c'est probablement une raison. Après, je ne suis pas assez expert en MySQL pour l'affirmer.

PS : Pense à marquer ton sujet comme résolu si c'est le cas :).

par Snipy » 08 janv. 2008, 22:11

Bon effectivement j'ai trouvé le problème mais je n'ai pas compris.
Dans phpmyadmin la requete me mettait la même erreur de table inexistante.

Donc j'ai pensé à mettre des ` ` autour de ma table (comme le fait automatiquement phpmyadmin, et dans ce cas la ça marche... ça marche dans phpmyadmin

Vous auriez une idée pourquoi?

par Hywan » 08 janv. 2008, 20:04

Et comme d'habitude, si tu exécutes ta requête dans PMA (PhpMyAdmin), tu as la même erreur ? Au moins, tu es sûr que la table existe, et ça te permettra un débuggage plus fin.