繁体   English   中英

PHP从Mysql数据库创建变量列表

[英]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];
 }
}

您的代码中有一个较小的语法错误,这会导致错误。 您需要在此处执行以下操作:

  1. 从数据库表中获取nameal_sq列。 这是通过选择$lang的值(基于您的代码)来完成的。 出于安全原因, $lang的值可以防止SQL注入,因为您没有指定值的来源。

  2. 然后,您必须检查是否有任何结果,并且在没有结果的情况下,它只会以错误终止脚本。

  3. 最后,您必须遍历返回结果的每一行,并进行变量变量分配。 这将使$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM