【发布时间】:2018-10-24 09:27:09
【问题描述】:
我想要的是将每个单词/句子/ ...存储在数据库表中,如下所示:
表名:
translate
列:
id, var, dutch, english, french
例子:
'1', 'titleOne', 'Hallo Wereld!', 'Hello World!', 'Bonjour le monde!'
我想要在标题部分打印变量:
<?php
echo $titleOne;
?>
由于会有数百行我不想为每一行设置$titleOne = $row['titleOne']。
有人可以帮我做一个很好的查询、拉取、获取、数组、循环……不管你怎么称呼它? (或者一个不错的替代方式也不错!)
这是纯 PHP,没有使用任何框架。
PS:我根本不是 PHP 专家,所以请尽量保持简单:-)!
非常感谢!
【问题讨论】:
-
你在使用任何框架吗?或者在核心 PHP 中编码?
-
什么包含一个典型的
$row数组? -
您对使用翻译键有正确的想法,但不要为每种语言使用单个列。您不希望每次添加/删除语言时都必须修改表结构。有很多方法可以实现多语言站点。这是我用于中小型网站的一种简单方法 - stackoverflow.com/a/49758067/296555。如果您想要 i18n 的更多功能,请查看框架中的包 - Symfony 的很好 symfony.com/doc/current/best_practices/i18n.html。
-
呼应@waterloomatt 现在停止使用您正在使用的设计,并在此
Translate表上退后一步。至少应该是id | var | language | translation。条目看起来像1 | 'titleOne' | 'english' | 'Hello World'。然后,当您查询它时,您执行SELECT var, translation FROM translate WHERE language = 'english';现在您可以将查询参数化到该表以获取一种语言,而不是切换代码中的列,这将使您免于潜在的 sql 注入向量,并使您的应用程序可以扩展而无需不断更改数据库架构。 -
@KevinGoethals - 您可以但不应该将变量直接嵌入到您的 SQL 语句中(SQL 注入攻击)。相反,您应该使用准备好的语句将变量绑定到查询中。但是,准备好的语句不支持也不应该将列名作为占位符。在这里查看更多信息 - stackoverflow.com/q/182287/296555。理解这一点并使用效果良好的设计是设计师的工作。这些限制是有原因的。听起来您已经准备好深入研究 SQL 查询了。从 PDO 开始 - phpdelusions.net/pdo
标签: php mysql sql multilingual