如何使用php以json中的数组形式返回mysql-select


how to return a mysql select as an array of arrays in json using php

我正在尝试将mysql请求(select)导出到数组的json数组,这样javascript中的JSON.parse将返回数组数组,而不是对象数组,因为在回答之前提出的类似问题后会发生什么。

要将mysql请求转换为数组的json数组,应该更改什么?

json_encode要返回数组的JSON数组,需要一个数字索引数组。

这可以通过以下通用函数获得:

    function SqlSelectToJsonTable($result,$withNames=false){
        // result a mysqli::query object, 
        // withNames: boolean, should the column names be returned as first row
        $return_arr = array();
        echo $result->num_rows;
        if ($result->num_rows > 0){
            if($withNames == true){
                $return_arr[0] = array();
                $fields = $result->fetch_fields();
                foreach ($fields as $field){
                    echo "column: ".$field->name." ";
                    array_push($return_arr[0],$field->name);
                }
            }
            while($row = $result->fetch_assoc()) {
                $return_arr[]= array_values($row);
            }
        } else {
            echo "0 results";
        }
        return json_encode($return_arr);
    }

如下所示:

    <?php
    $servername = "localhost";
    $username = "user";
    $password = "password";
    $dbname = "test";
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    $sql = "SELECT id, title FROM Posts";
    $result = $conn->query($sql);
    $jsonTable = SqlSelectToJsonTable($result);
    echo '<br/>'.$jsonTable;
    echo "<script type='"text/javascript'">
        var jsTable = JSON.parse('".$jsonTable."');
        </script>";
    $conn->close();
    ?>

其中jsTable实际上是一个数组数组。注意选项withNames允许将列名添加为第一行,如果您试图将此数组传递给javascript以进行google可视化,请使用full。