从 MySQL 设置一个数组,然后将每个值设置为变量 PHP
Posted
技术标签:
【中文标题】从 MySQL 设置一个数组,然后将每个值设置为变量 PHP【英文标题】:Setting an Array From MySQL then Setting Each Value As a Variable PHP 【发布时间】:2018-06-04 14:55:02 【问题描述】:我正在尝试根据从我的数据库中提取的数据设置 12 个变量。目前,我将它们设置为一个数组,然后从那里设置为一个变量。但是,由于某种原因,我的数据库中的第 12 个值没有被输入到我的数组中,然后当我尝试回显每个变量时,我会错过匹配的日期。任何人都可以在这里看到我哪里出错了吗?
示例数据库
日期 1 = 01/01/2018
日期 2 = 02/01/2018
日期 3 = 03/01/2018
date4 = 04/01/2018
日期 5 = 05/01/2018
date6 = 06/01/2018
date7 = 07/01/2018
date8 = 08/01/2018
日期 9 = 09/01/2018
date10 = 10/01/2018
date11 = 11/01/2018
date12 = 12/01/2018
示例数组
Array
(
[0] =>; 01/01/2018
[1] =>; 02/01/2018
[2] =>; 03/01/2018
[3] =>; 04/01/2018
[4] =>; 05/01/2018
[5] =>; 06/01/2018
[6] =>; 07/01/2018
[8] =>; 08/01/2018
[9] =>; 09/01/2018
[9] =>; 10/01/2018
[10] =>; 11/01/2018
[11] =>; 12/01/2018 //-----This isn't being added-----
)
回声示例
$var1 = 01/01/2018 //-----应该是 01/01/2018-----
$var2 = 02/01/2018 //-----应该是 02/01/2018-----
$var3 = 01/01/2018 //-----应该是 03/01/2018-----
$var4 = 02/01/2018 //-----应该是 04/01/2018-----
$var5 = 03/01/2018 //-----应该是 05/01/2018-----
$var6 = 01/01/2018 //-----应该是 06/01/2018-----
$var7 = 02/01/2018 //-----应该是 07/01/2018-----
$var8 = 03/01/2018 //-----应该是 08/01/2018-----
$var9 = 04/01/2018 //-----应该是 09/01/2018-----
$var10 = 01/01/2018 //-----应该是 10/01/2018-----
$var11 = 02/01/2018 //-----应该是 11/01/2018-----
$var12 = 03/01/2018 //-----应该是 12/01/2018-----
<?php
include 'db.php';
if (isset($_GET['id']))
$id = $_GET['id'];
$sql = "SELECT * FROM system WHERE `id` = '$id' AND `status` = 'Not Set'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
if ($result->num_rows > 0)
$arrayResults = array();
$i = 0;
while($row = $result->fetch_assoc())
array_push($arrayResults, $row['date']);
foreach($arrayResults as $value)
$'var'.$i = $value;
$i++;
print_r($arrayResults);
echo '<br><br>';
echo $var1.'<br>';
echo $var2.'<br>';
echo $var3.'<br>';
echo $var4.'<br>';
echo $var5.'<br>';
echo $var6.'<br>';
echo $var7.'<br>';
echo $var8.'<br>';
echo $var9.'<br>';
echo $var10.'<br>';
echo $var11.'<br>';
echo $var12.'<br>';
?>
更新
回显日期现在以正确的顺序回显,现在唯一的问题是它仍然缺少数据库中的第一个条目,因此它只创建 11 个变量而不是 12 个。数组数据打印除第一个之外的所有日期,因此数组条目是从 [0] 到 [10] 时需要为 [0] 到 [11]。
<?php
include 'db.php';
if (isset($_GET['id']))
$id = $_GET['id'];
$sql = "SELECT * FROM system WHERE `id` = '$id' AND `status` = 'No Set'";
$result = $conn->query($sql);
if ($result->num_rows > 0)
$row = $result->fetch_assoc();
$arrayResults = array();
$i = 0;
while($row = $result->fetch_assoc())
array_push($arrayResults, $row['date']);
$'var'.$i = $row['date'];
$i++;
print_r($arrayResults);
echo '<br><br>';
echo $var0.'<br>';
echo $var1.'<br>';
echo $var2.'<br>';
echo $var3.'<br>';
echo $var4.'<br>';
echo $var5.'<br>';
echo $var6.'<br>';
echo $var7.'<br>';
echo $var8.'<br>';
echo $var9.'<br>';
echo $var10.'<br>';
echo $var11.'<br>';
?>
【问题讨论】:
嘿只是一个友好的警告,您的代码容易受到 SQL 注入的攻击。查看mysqli prepare 来解决这个问题。 【参考方案1】:你应该把“foreach”放在“while”之外
while($row = $result->fetch_assoc())
array_push($arrayResults, $row['date']);
foreach($arrayResults as $value)
$'var'.$i = $value;
$i++;
请注意,这个 make 循环会在结果上重复两次。您可以在 while 中直接实例化“$varx”。如果你对 $arrayResults 没有其他用途,你可以跳过它。
while($row = $result->fetch_assoc())
array_push($arrayResults, $row['date']);//this line is not compulsory. Depends if you need $arrayResults later.
$'var'.$i = $row['date'];
$i++;
【讨论】:
感谢您的帮助,我发现这个答案有一个小问题。当我实现它时,我发现它跳过了我数据库中的前两个条目。知道为什么会这样,因为这是我最接近答案的地方? 啊,是的,我没看到。你不应该做“$row = $result->fetch_assoc();”在if之外。您的代码中的第一个。这解释了缺少一个条目。现在第二个我不知道。但是请尝试删除此行并让我知道。 当然也正如 delboy1978uk 的回答中所说,如果你希望你的第一个变量是 $var1,请将 $i 设置为 1 我已经在我的帖子中添加了一个更新,提供了我尝试使用的新代码,这样你就可以看到发生了什么。当我将$row = $result->fetch_assoc();
移动到if
标签内时,仍然没有得到第一个标签。但是现在变量中的所有内容都按照正确的顺序排列,但仍然缺少第 12 个条目。
解决了问题!删除了$row = $result->fetch_assoc();
,果然一切运行良好。谢谢你的帮助。【参考方案2】:
您从$var1
回显,但您的循环从$i = 0
开始;
尝试设置$i = 1
,或开始回显$var0
并以$var11
结束
【讨论】:
感谢您的观察,非常有效的观点。我使用了$var0
到$var11
但是,这并没有解决任何问题。我仍然没有从数据库中获取到数组的第 12 个日期,数组中的编号为 [11]
,它只会转到第 11 个编号 [10]
。此外,我仍然没有正确设置我的变量,因为它们仍然像示例显示的那样为每个变量回显不正确的日期。以上是关于从 MySQL 设置一个数组,然后将每个值设置为变量 PHP的主要内容,如果未能解决你的问题,请参考以下文章