使用包含大量行的PHP生成JSON

时间:2017-03-03 11:56:54

标签: php mysql json

我正在使用下面的代码生成JSON,在本地WAMP服务器上正常工作。但是当我将文件导出到WEB时,脚本只在SELECT中生成带有几个bank的json,如果查询结果大于10,则不会产生任何东西,本地服务器上的东西不会发生。

有人有这个问题吗?编辑PHP.ini文件会是什么情况吗?

   <?php
    //open connection to mysql db
    $connection = mysqli_connect("localhost","root","123","vendas") or die("Error " . mysqli_error($connection));

    //fetch table rows from mysql db
    $sql = "SELECT * FROM os WHERE id_user = 15 and data_conclusao = '2017-03-02'";
    $result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));

    //create an array
    $emparray = array();
    while($row =mysqli_fetch_assoc($result))
    {
        $emparray[] = $row;
    }
    echo json_encode($emparray);

    //close the db connection
    mysqli_close($connection);
?>

3 个答案:

答案 0 :(得分:0)

检查您的数据是否包含UTF-8字符。如果是,请尝试通过以下方式替换您的代码:

{{1}}

答案 1 :(得分:0)

json_encode是一个非常静音的函数,如果在编码时出现任何问题,它只返回false而没有错误消息。如果您确定$emparray确实包含所需数据,则下一个调试步骤是使用json_last_error(),这将有助于您了解其中发生的情况。

此类行为的一个常见原因是输入字符串中的不可编码字符,或者通常是那里出现的二进制序列号。但是,只有在解码错误消息时才能学习它 - 遵循我提供的参考。

答案 2 :(得分:0)

You could encode each row, one row at a time instead of encoding it in one big operation.    
$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);