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