我正在处理以下代码。为什么我的JSON输出中只有一行?
$items = [];
if ($stmt = $this->conn->prepare("SELECT * FROM $tbl")) {
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$items = $row;
}
$stmt->free_result();
$stmt->close();
}
$this->conn->close();
}
echo json_encode($items);
答案 0 :(得分:4)
之所以会发生这种情况,是因为您要遍历各行并将它们分别分配给$items
:
while ($row = $result->fetch_assoc()) {
$items = $row;
}
因此,在循环结束后,您最终得到一个变量,该变量是在该循环的最后一次迭代期间分配的$ row。
您需要将值推入数组,如下所示:
$items[] = $row;
答案 1 :(得分:1)
$items[] = $row;
将解决问题。
答案 2 :(得分:1)
尝试使用array_push函数:
$items = array();
if ($stmt = $this->conn->prepare("SELECT * FROM $tbl")) {
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
array_push($items, $row);
}
$stmt->free_result();
$stmt->close();
}
$this->conn->close();
}
echo json_encode($items);
根据Paolo Bergantino-在PHP $array[] = $value
或array_push($array, $value)
中使用哪个更好?
他说:
如果使用array_push()将一个元素添加到数组中,则最好 请使用$ array [] =,因为这样就不会产生调用 功能。
答案 3 :(得分:0)
要解决您的问题,必须更改部分代码:
while ($row = $result->fetch_assoc()) {
$items = $row;
}
收件人:
while ($row = $result->fetch_assoc()) {
$items[] = $row;
}
但是如果您使用PDO,我认为最好更改这部分代码:
$items = [];
if ($stmt = $this->conn->prepare("SELECT * FROM $tbl")) {
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$items = $row;
}
$stmt->free_result();
$stmt->close();
}
$this->conn->close();
}
收件人:
if ($stmt = $this->conn->prepare("SELECT * FROM $tbl")) {
$stmt->execute();
$items = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
并删除while循环。
答案 4 :(得分:0)
之所以只在JSON中获得一行,是因为在forms.py
循环中,您每次都覆盖相同的变量,而不是将其压入数组。一个简单的解决方法是:
while
这也可以使用while ($row = $result->fetch_assoc()) {
$items[] = $row;
}
循环来编写。
foreach
您根本不需要这个foreach($result as $row) {
$items[] = $row;
}
循环。如果使用while
,则可以简化代码。您只需将问题中的所有代码替换为:
fetch_all()
$stmt = $this->conn->prepare("SELECT * FROM $tbl");
$stmt->execute();
$result = $stmt->get_result();
$items = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($items);
将为您提供关联数组中的所有行。