微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用PHP从MYSQL获取数据到JSON

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

我收到以下错误..

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 1979603 bytes) in /var/www/test.PHP on line 33

其中第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);


    ?>
您可能正在编码一个非常大的数据集.您可以一次编码每一行,而不是在一个大操作中对其进行编码.
<?PHP
require('../../admin/db_login.PHP');

$db=MysqL_connect($host,$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);

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

原文地址:https://www.jb51.cc/php/136668.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐