我知道这个问题以前被问过很多次,但给出的解决方案似乎都不适合我。使用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列的所有值,其中savesuser_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/

10-12 12:40
查看更多