我知道这个问题以前被问过很多次,但给出的解决方案似乎都不适合我。使用while循环,我将从数据库中检索多个值作为数组。之后-在while循环之外(!重要的是),我需要检查这个数组中是否存在特定的值。
<?php
$require "db.php";
$sql = "SELECT id FROM users WHERE email='" . $user . "';";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
$userId = $row["id"];
$sql = "SELECT item_id FROM saves WHERE user_id='" . $userId . "';";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$saved = $row["item_id"];
}
} else {
echo "Error.";
}
} else {
echo "Error.";
}
print_r($saved);
如果你想知道,
$user
等于John
,$userId
等于1
。如您所见,
$saved
变量假设包含数据库表中item_id
列的所有值,其中saves
是user_id
。下面是我的数据库表:
<table border="1">
<tr>
<td>
user_id
</td>
<td>
item_id
</td>
</tr>
<tr>
<td>
1
</td>
<td>
1
</td>
</tr>
<tr>
<td>
2
</td>
<td>
1
</td>
</tr>
<tr>
<td>
1
</td>
<td>
2
</td>
</tr>
</table>
所以
$userId
数组应该包含值saves
和$saved
,对吧?问题是,当我在while循环之外时,它只输出最后一个条目(
1
)。如何在while循环之外获取
2
数组的所有值? 最佳答案
在开始$saved
循环之前,首先需要将while
变量初始化为空数组。
$saved = array();
现在,在while循环中,您不是将
$saved
用作数组,而是将其用作普通变量。它每次在while
循环中都会被覆盖。请改为执行以下操作:
$saved[] = $row["item_id"];
注意
[]
的用法。它基本上将一个新条目推入$saved
数组。另一种选择是array_push功能。如:$push_result = array_push($saved, $row["item_id"]);
所以,这应该是:
$require "db.php";
$sql = "SELECT id FROM users WHERE email='" . $user . "';";
$result = mysqli_query($conn, $sql);
// initialize $saved here
$saved = array();
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
$userId = $row["id"];
$sql = "SELECT item_id FROM saves WHERE user_id='" . $userId . "';";
$result = mysqli_query($conn, $sql);
//$saved = []; - no need of this now
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$saved[] = $row["item_id"]; // you are missing []
}
} else {
echo "Error.";
}
} else {
echo "Error.";
}
print_r($saved);
最重要的是,您的查询对SQL injection related issues开放。请阅读how to use Prepared Statements,并加以利用。
关于php - 如何在PHP的while循环之外获取所有数组值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52576247/