Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将结果从数据库提取到多个变量_Php_Mysql_Mysqli - Fatal编程技术网

Php 将结果从数据库提取到多个变量

Php 将结果从数据库提取到多个变量,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个网站,用户填写表单,所有数据都存储在数据库中,当用户进入他/她的页面时,所有添加的数据都是可见的。今天我正在做这件事,但是在很多代码行中,肯定有一种更平滑的方法来做这件事 以下是我今天是如何做到这一点的: $query = mysqli_query($dbhandle, "SELECT * FROM ..."); // ... added now $row = mysqli_fetch_assoc($query); $m0 = $row['m1']; $m1 = $row['m

我有一个网站,用户填写表单,所有数据都存储在数据库中,当用户进入他/她的页面时,所有添加的数据都是可见的。今天我正在做这件事,但是在很多代码行中,肯定有一种更平滑的方法来做这件事

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

 $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'];
正如您所看到的,有很多行代码。我想做的是循环查询,然后将数据库中的正确值添加到表单中的正确值


感谢您的帮助。

通过$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,等等。

肯定有很多更好的方法(并且在每个可能的意义上)来处理您的业务。
首先:问问自己数组实际上是什么。数组是数据的集合。将它们存储在一起是因为数组中的一个值本身并不重要。数组中的数据属于一起。那么,为什么首先要将其分配给各个变量呢

当然,您的
$row
数组具有类似
$row['m1']
的键,您可以将这些键分配给名为
$m0
的变量。因此,数据库中字段的名称与代码使用的名称不太匹配。通过更改查询,您可以很容易地解决这一问题:为这些字段使用别名:

SELECT m1 as m0, ... FROM 
现在,您的数组将有一个名为
m0
的键,而不是
m1
。这将代码的其余部分缩减为:

$row = mysqli_fetch_assoc($query);
echo 'M0: ', $row['m0'];//<-- use m0 value here.
不过,如果您的代码无法维护、凌乱、容易出错且糟糕透顶,那么您可以使用变量:

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

注意
$$键中的双
$
。这就像说“无论
$key
的值是什么,都会调用变量”。如果
$key
是firstname,则上述代码的计算结果为
$firstname=$value
。但无论你做什么:忘记这是可能的。就像灌肠一样:是的,这是可能的,但是如果你能避免的话,你就不想要灌肠了。在这种情况下,您显然可以避免它。

这里有帮助:您的意思是要为每一行、每两列分配一个同名变量?regex+variable variables。你是认真的吗?为什么没有人想到
选择字段作为别名
?或者一个简单的
$map
数组,正如我所解释的。这两个选项都比你在这里建议的更好。这很有帮助,我更改了数据库中的名称,然后我只使用了$row['m0'];不用创建新变量并存储值,谢谢@AwmaN:您甚至不必更改数据库中的字段名,在查询中设置自定义名称也同样有效:
selectfield\u name AS use\u name
效果很好。
foreach ($row as $key => $value)
{
    $$key = $val;
}