[英]PHP Creating variables list from Mysql database
我有一个数据库,它以这种方式用于3种语言:
id name de_de al_sq
1 title titel titulli
2 points punkte pike
现在在php中将$ lang设置为'al_sq':
$lang = 'al_sq';
我正在尝试使用该语言的名称生成变量,在这种情况下:
$langtitle = 'titulli';
$langpoints = 'pike';
尝试类似的东西:
$sql = "SELECT * FROM `langs`";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$lang{$row["lang"]} = $row[$lang];
}
}
但是有些不好,如何生成这些变量?
似乎您将数据库用作具有多个值字段的键值存储,具体取决于语言,您可以使用PDO::FETCH_KEY_PAIR
以便它返回名称为键的数组。 这样,您还可以避免加载可能根本不需要的其他语言的数据:
$query = "SELECT `name`, :column as value FROM `langs`";
$statement = $pdo->prepare($query);
$statement->execute(["column" => $lang]);
$data = $statement->fetchAll(\PDO::FETCH_KEY_PAIR);
// $data becomes an array with the name as the key:
$langtitle = $data['title'];
$langpoints = $data['points'];
如果用户提供了$lang
的值,请确保检查它是否是有效的列值。
根据数据库的显示方式,这应该接近您想要的内容。 如果存储更多的标题和点,则按比例放大将很麻烦。
$lang = 'al_sq';
$sql = "SELECT $lang FROM 'langs'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$langtitle = $row[1];
$langpoints = $row[2];
}
}
您的代码中有一个较小的语法错误,这会导致错误。 您需要在此处执行以下操作:
从数据库表中获取name
和al_sq
列。 这是通过选择$lang
的值(基于您的代码)来完成的。 出于安全原因, $lang
的值可以防止SQL注入,因为您没有指定值的来源。
然后,您必须检查是否有任何结果,并且在没有结果的情况下,它只会以错误终止脚本。
最后,您必须遍历返回结果的每一行,并进行变量变量分配。 这将使$langpoints
等起作用(以及将来可能添加的任何其他$langpoints
)。
码:
$sql = 'SELECT `name`, `' . $conn->real_escape_string($lang) . '` FROM `langs`';
$result = $conn->query($sql);
if (!$result || !$result->num_rows) {
echo 'Invalid language selected';
exit;
}
while ($phrase = $result->fetch_assoc()) {
${'lang' . $phrase['name']} = $phrase[$lang];
}
// $langtitle
// $langpoints
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.