【问题标题】:Return an array containing all of the result set rows as objects返回一个包含所有结果集行作为对象的数组
【发布时间】:2015-10-06 13:14:51
【问题描述】:

我正在尝试使用 angular 和 php 从 mysql 数据库中检索数据。

在角度我使用以下代码:

$http({ url: "http://domain.com/script.php",
                method: "POST",
                headers: {'Content-Type': 'application/x-www-form-urlencoded'},
                data: $.param({clubid:$localStorage.choosenClub.ClubID})
            }).success(function(data) {

                console.log(data);

            }).error(function(data) {
                console.log("error:" + data);
            })
            .finally(function () {
                //Do something on finish
        });

在我的 PHP 脚本中,我正在执行以下操作:

$sql = "SELECT * FROM events WHERE club_id='$club'";
$result = $conn->query($sql);   

if ($result->num_rows > 0) {        
    while($row = $result->fetch_assoc()) {
        echo('[');
        echo json_encode($row);
        echo(']');
    }
} else {
    echo "0 results";
}

当我的 mysql 数据库中有一行数据时,上面的代码将为我提供一个数组中的对象:

[{"event_id":"123456","club_id":"12345","organizer":"name","date":"2016-04-24","time":"08:00:00","title":"test title"}]

根据上述结果,我可以使用 angular $http(上面的代码)检索 de 数据,并且可以使用 ng-repeat 将其填充到我的页面上,没有任何问题。

当我在我的 mysql 数据库中添加更多包含数据的行时,它不再工作了。 例如,当我的 mysql 数据库中有两行数据时,结果如下所示:

[{"event_id":"123456","club_id":"12345","organizer":"name","date":"2016-04-24","time":"08:00:00","title":"test title"}][{"event_id":"98765","club_id":"526789","organizer":"name","date":"2016-04-24","time":"08:00:00","title":"test title"}]

我在控制台中收到以下错误:

错误:JSON 解析错误:无法解析 JSON 字符串 parse@[native 代码]

我认为(如果我错了,请纠正我)格式化多行数据有问题。 当我有一行数据时,它是数组中的一个对象,当我有多行数据时,它们不再是数组中的对象。

我做错了什么?

【问题讨论】:

    标签: php arrays angularjs object post


    【解决方案1】:

    你不应该尝试自己构建一个 json 字符串,php 可以为你做这件事。 :)

    首先将所有行添加到数组中,然后json_encode 数组。

    $sql = "SELECT * FROM events WHERE club_id='$club'";
    $result = $conn->query($sql);   
    
    if ($result->num_rows > 0) { 
        $rows = [];       
        while($row = $result->fetch_assoc()) {
            // Add all rows to an array
            $rows[] = $row
        }
    
        // Json encode the full array
        echo json_encode($rows);
    } else {
    
        echo "0 results";
    
    }
    

    此外,您最好回显[],而不是回显0 results,因为这可以被您的json解析器解析为一个空数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2016-07-30
      • 2014-06-20
      • 1970-01-01
      相关资源
      最近更新 更多