MySQL -我可以在SELECT中使用变量来代替列名吗?

  • 本文关键字:变量 我可以 SELECT MySQL mysql
  • 更新时间 :
  • 英文 :


我有以下代码片段来实现一个多语言网站。我的想法是,根据用户的语言,我需要把单词"Man"翻译成"Hombre"

我的问题:在这里使用$user_language而不是硬编码的列名"Spanish"是否有效?

代码://$user_language(在本例中为西班牙语)在登录到站点后从他的配置文件中传入

  SELECT $user_language 
  FROM TranslationTable 
  WHERE English=Man

TranslationTable:

  English     Spanish   French
  Man          Hombre    homme

谢谢SW

我不相信你可以使用这样的变量,但是你可以使用动态SQL构造你的查询。

但是,如果您有机会更改表结构,那么这可能是更好的选择。我建议将其分成以下表格:

Language (store your languages such as English, Spanish, etc):
LanguageId and LanguageName
LanguageTranslation (language translation lookup table):
LanguageId, TokenId, and Translation
Token (store your tokens - versus querying directly on the english translation):
TokenId and TokenName

那么你可以很容易地像这样查询:

SELECT Translation
FROM LanguageTranslation LT
   JOIN Language L ON LT.LanguageId = L.LanguageId
   JOIN Token T ON LT.TokenId = T.TokenId
WHERE L.LanguageName = 'Spanish'
    AND T.TokenName = 'Man'

我认为这应该不是问题。我在列选择过程中使用了变量(根据所选语言的数据库字段前缀),它对我有用。

尝试一下,如果它不起作用,把你的变量放在大括号{}中,你应该OK

可以(毕竟它只是一个字符串),但是您需要警惕注入—确保在替换之前过滤了变量(filter_var工作得很好:http://php.net/manual/en/function.filter-var.php)。

相关内容

最新更新