提问者:小点点

已耗尽允许的内存大小2147483648字节


致命错误:允许的2147483648字节的内存大小在第52行耗尽(尝试分配20480字节)(即使我将memory_limit设置为无穷大,该错误仍然发生)

$query= mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM users WHERE email='toluxy99@gmail.com'"));
    while($row = $query){
      $data[] = array(
        'username'=> $row['username'], // Line 52
        'email'  => $row['email'],
        'phone'=> $row['phone'],
        'city'=> $row['city'],
        'gender'=> $row['gender'],
      );

    }
    if($query) $result = json_encode(array('success'=>true, 'data'=>$data));
    else $result = json_encode(array('success'=>false, 'msg'=>mysqli_error($conn)));

    echo $result;

  }


共1个答案

匿名用户

不要使用while循环。 您刚刚创建了一个无限循环,因为您在每次循环时都将一个变量赋给另一个变量,而不改变条件。 您根本不需要循环,但如果由于某种原因确实需要循环,则需要使用foreach

$query = $conn->query("SELECT * FROM users WHERE email='toluxy99@gmail.com'");
$data = [];
foreach ($query as $row) {
    $data[] = [
        'username' => $row['username'],
        'email' => $row['email'],
        'phone' => $row['phone'],
        'city' => $row['city'],
        'gender' => $row['gender'],
    ];
}
if ($data) {
    $result = json_encode(['success' => true, 'data' => $data]);
} else {
    $result = json_encode(['success' => false, 'msg' => 'No data available!']);
}

echo $result;

您的代码中根本不需要循环。 只要一次把所有东西都拿来就行了。

$query = $conn->query("SELECT * FROM users WHERE email='toluxy99@gmail.com'");
$data = $query->fetch_all(MYSQLI_ASSOC);
if ($data) {
    $result = json_encode(['success' => true, 'data' => $data]);
} else {
    $result = json_encode(['success' => false, 'msg' => 'No data available!']);
}

echo $result;