我有以下代码片段来实现一个多语言网站。我的想法是,根据用户的语言,我需要把单词"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)。