使用PHP将数据从MYSQL获取到JSON

Lee*_*ong 7 php mysql json

我有以下非常简单的测试PHP代码,它提取数据并将其放入JSON格式的文本中.

我收到以下错误..

致命错误:第33行/var/www/test.php中允许的内存大小为33554432字节(尝试分配1979603字节)

其中第33行是该json_encode()行.

有没有办法让这个更有效率?在PHP.ini已设置为32M为最大,因此从8M标准尺寸的了!

 <?php
    require('../../admin/db_login.php');

    $db=mysql_connect($host, $username, $password) or die('Could not connect');
    mysql_select_db($db_name, $db) or die('');

    $result = mysql_query("SELECT * from listinfo") or die('Could not query');
    $json = array();

    if(mysql_num_rows($result)){
            $row=mysql_fetch_assoc($result);
        while($row=mysql_fetch_row($result)){
            //  cast results to specific data types

            $test_data[]=$row;
        }
        $json['testData']=$test_data;
    }

    mysql_close($db);

    echo json_encode($json);


    ?>
Run Code Online (Sandbox Code Playgroud)

And*_*ore 18

您可能正在编码一个非常大的数据集.您可以对每行进行编码,一次编码一行,而不是在一次大操作中对其进行编码.

<?php
require('../../admin/db_login.php');

$db=mysql_connect($host, $username, $password) or die('Could not connect');
mysql_select_db($db_name, $db) or die('');

$result = mysql_query("SELECT * from listinfo") or die('Could not query');

if(mysql_num_rows($result)){
    echo '{"testData":[';

    $first = true;
    $row=mysql_fetch_assoc($result);
    while($row=mysql_fetch_row($result)){
        //  cast results to specific data types

        if($first) {
            $first = false;
        } else {
            echo ',';
        }
        echo json_encode($row);
    }
    echo ']}';
} else {
    echo '[]';
}

mysql_close($db);
Run Code Online (Sandbox Code Playgroud)

这样,每次调用json_encode()只编码一个小数组而不是一个大数组.最终结果是一样的.这是IMO解决方案,它将使用更少的内存.


Mar*_*ker 10

停止复制您的数据数组

$json = array();

if(mysql_num_rows($result)){
        $row=mysql_fetch_assoc($result);
    while($row=mysql_fetch_row($result)){
        //  cast results to specific data types

        $json['testData'][]=$row;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将有助于减少您的内存使用量


Roh*_*har 7

使用这个:

$result = mysql_query("SELECT * FROM listinfo");

$json = array();
$total_records = mysql_num_rows($result);

if($total_records > 0){
  while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){
    $json[] = $row;
  }
}

echo json_encode($json);
Run Code Online (Sandbox Code Playgroud)

  • 一些解释会很好 (2认同)