【问题标题】:Allowed memory size of 2147483648 bytes exhausted允许的内存大小为 2147483648 字节已用尽
【发布时间】:2020-10-06 03:22:26
【问题描述】:

致命错误:第 52 行中允许的内存大小为 2147483648 字节已用尽(尝试分配 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;

  }

【问题讨论】:

  • while($row = $query){ 只是继续将 $row 设置为 $query。也许foreach 更合适?
  • ...或者做:while($row = mysqli_fetch_array(...)) { ... }
  • 我如何在这里申请每个人......对不起,我不是一个 php 人,我只需要这个集成@Nigel Ren
  • 我还建议不要将mysqli_query() 直接传递给mysqli_fetch_array()。如果这样做,如果查询失败,您将收到错误消息。最好单独进行调用并检查您能够优雅地处理错误。
  • 这里是the manual,其中有一堆关于如何使用 mysqli 扩展的示例

标签: php mysqli


【解决方案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;

【讨论】:

    猜你喜欢
    • 2012-08-29
    • 2018-02-24
    • 2012-08-08
    • 1970-01-01
    • 2017-08-26
    • 2019-10-05
    • 2015-10-13
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多