J'ai une table appelée bank
avec trois colonnes: uid
, nick
, balance
.
J'essaie de créer une requête qui va renvoyer le solde en fonction du pseudo, et j'obtiens une erreur Unknown column 'Alex' in 'where clause'
lorsque j'utilise cette requête:
SELECT b.balance FROM bank AS b WHERE b.nick=`Alex` LIMIT 1
Quelqu'un peut-il voir ce que je fais mal ici?
les backticks (`) sont utilisés pour les identificateurs, tels que les noms de table, les noms de colonnes, etc. Les guillemets simples (') sont utilisés pour les littéraux de chaîne.
Vous voulez faire:
SELECT b.balance FROM bank AS b WHERE b.nick='Alex' LIMIT 1
Ou, pour être plus explicite:
SELECT `b`.`balance` FROM `bank` AS b WHERE `b`.`nick`='Alex' LIMIT 1
Lorsqu'il n'y a aucune chance d'ambiguïté et lorsque les noms de table/colonne ne contiennent pas de caractères spéciaux ni d'espaces, vous pouvez laisser le `éteint.
Voici une documentation sèche et difficile à lire: http://dev.mysql.com/doc/refman/5.0/fr/identifiers.html
Mais voici une question connexe sur dba.stackoverflow qui est plus facile à lire: https://dba.stackexchange.com/questions/23129/benefits-of-using-backtick-in-mysql-queries
Et voici une très bonne page que je recommande à tous de lire: http://www.sitepoint.com/forums/showthread.php?408497-the-big-bad-thread-of-quot-MySQL-Best-Practices -et-Autres-Informations-Utiles-quot
Vous utilisez le mauvais "` "
Utilisez 'à la place
SELECT b.balance FROM bank AS b WHERE b.nick='Alex' LIMIT 1
Vous devez utiliser des guillemets simples ('
) et non des graduations pour les valeurs de vos champs.
SELECT b.balance FROM bank AS b WHERE b.nick='Alex' LIMIT 1
Les coches sont utilisées pour désigner les noms de champs.
Ce sujet m'aide beaucoup. La SQL
était à l'origine de l'erreur parce que les variables n'étaient pas avec comme ça: select * from accounts where name='$variable'
dans où. Mais c’est arrivé seulement quand j’ajoute plus d’une condition dans WHERE
.