2012-12-25 5 views
3

Possible en double:
MySQL - when to use single quotes, double quotes, and backticks?Citations MySQL Query et comme

Question 1

Pourquoi ce travail?

"SELECT `id` FROM `table` WHERE x= '".$y."'" 

mais pas cela?

"SELECT `id` FROM `table` WHERE 'x' = '".$y."'" 
           ^^ 
           Notice the extra single quotes 

Question 2 Est-il préférable de faire id sur `id` (avec les guillemets étranges)? Ou est-ce parce que les guillemets le font interpréter comme une variable?

+0

Qu'est-ce qui a vraiment besoin est un peu (http://bobby-tables.com/php) [bon échapper SQL]. Vous ne devriez ** jamais ** insérer des données utilisateur directement dans une requête. Utilisez des espaces réservés ou il pourrait y avoir des conséquences graves. – tadman

+0

merci pour la suggestion :) – Wulf

Répondre

6

parce que le serveur lit x comme une valeur comme il est envelopper avec single quote. backtick échappe un mot clé réservé utilisé dans la requête, généralement il est utilisé pour enrouler columnNames et tableNames.

dans votre requête,

SELECT `id` FROM `table` WHERE 'x' = '$y' 

x il n'y a pas une colonne mais une valeur de chaîne.

pour la question 2, vous pouvez éliminer les guillemets obliques autour id car il est pas Reserved Keyword, voici une liste complète des mots clés réservés dans MySQL

En sidenote, la requête est vulnérable avec SQL Injection. S'il vous plaît jeter un oeil à l'article ci-dessous pour apprendre comment éviter cela. En utilisant PreparedStatements vous pouvez vous débarrasser de l'utilisation de guillemets simples autour des valeurs.

+0

Merci beaucoup – Wulf

+1

vous êtes les bienvenus! ': D –