将数据库中的结果提取到多个变量

时间:2014-06-30 11:16:22

标签: php mysql mysqli

我有一个站点是用户填写表单并且所有数据都存储在数据库中,当用户进入他/她的页面时,所有添加的数据都是可见的。今天我这样做但是在很多代码行中,确实有一个更平滑的方法来做到这一点。

以下是我今天如何做到这一点:

 $query = mysqli_query($dbhandle, "SELECT * FROM ..."); // ... added now
 $row = mysqli_fetch_assoc($query);

 $m0 = $row['m1'];
 $m1 = $row['m2'];
 $m2 = $row['m3'];
 $m3 = $row['m4'];
 ...
 $m47 = $row['m48'];
 $firstPlace = $row['firstPlace '];
 $secondPlace = $row['secondPlace '];
 $thirdPlace = $row['thirdPlace '];
 $fourthPlace= $row['fourthPlace'];

正如您所看到的,有很多行代码。我想要做的是遍历我的查询,然后将数据库中正确的值添加到表单中的正确值。

感谢帮助。

2 个答案:

答案 0 :(得分:0)

循环遍历$ row var抓取键和值。如果密钥以" m"开头接着是1位或2位数字,得到数字,减1,用" m"连接,然后分配数值。否则只需将键插入变量名并赋值。

foreach ( $row as $key => $value ) {
    if ( preg_match('/^m(\d{1,2})/', $key, $matches) ) {
        ${'m' . ($matches[1] - 1)} = $value;
    }
    else { $$key = $value; }
}

在上面的示例中,$ row [' m1']值分配给var $ m0,$ row [' firstPlace']分配给var $ firstPlace等。

答案 1 :(得分:0)

肯定有很多替代方案(并且在每种可能的意义上)都有更好的方式来开展业务 为了开球:问问自己一个阵列究竟是什么。数组是数据的集合。您将它们存储在一起,因为该数组的一个值本身并不重要。数组中的数据属于。为什么然后,首先将它分配给个别变量?

当然,您的$row数组包含$row['m1']之类的键,您可以将其分配给名为$m0的变量。因此,数据库中字段的名称与您的代码使用的名称不完全匹配。通过更改查询,您可以非常轻松地修复这些问题:对这些字段使用别名:

SELECT m1 as m0, ... FROM 

现在,您的数组将有一个名为m0的密钥,而不是m1。这会将代码的其余部分缩减为:

$row = mysqli_fetch_assoc($query);
echo 'M0: ', $row['m0'];//<-- use m0 value here.

或者,您可以使用第二个数组将这些字段名称映射到您要在代码中使用的名称:

$map = array(
    'm0' => 'm1'
);
echo 'M0: ', $row[$map['m0']];//use value of m0, which is the actual key if the $row array

尽管如此,如果你受到不可维护,凌乱,容易出错且只是糟糕的代码的束缚,你可以使用变量:

foreach ($row as $key => $value)
{
    $$key = $val;
}

请注意$中的双$$key。这就像说“被调用的变量,无论$key的值是什么”。如果$key名字,则上面的代码评估为$firstname = $value。但无论你做什么:忘记这是可能的。这就像灌肠:是的,它是可能的,但如果你能避免它,你就不想要它。在这种情况下,你显然可以避免它。