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

时间:2019-03-14 16:32:02

标签: php mysqli

我有一个数据库,它以这种方式使用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];
  }
}

但是有些不好,如何生成这些变量?

3 个答案:

答案 0 :(得分:1)

似乎您将数据库用作具有多个值字段的键值存储,具体取决于语言,您可以使用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的值,请确保它是有效的列值。

答案 1 :(得分:1)

根据数据库的显示方式,这应该接近您想要的内容。如果存储更多的标题和点,则按比例放大将很麻烦。

$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];
 }
}

答案 2 :(得分:1)

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

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

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

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