如何将此postgres db查询的结果转换为json以返回到我的jquery调用?

时间:2009-12-02 02:17:42

标签: php jquery ajax json

我正在为我们学校的年度数学竞赛创建比赛注册页面。当您单击并选择下拉列表中的项目时,它需要一些类似AJAX的行为。

当我在下拉列表中选择某些内容时(我正在显示一个警告框),我发现了一个事件:

<script type="text/javascript">
    $(function() {
        $("#student").change(onStudentChange);
     });

     function onStudentChange()
     {
         alert("Dropdown changed");
     }
</script>

这需要做的是对服务器进行异步调用,以获取学生当前注册的竞赛列表。

我知道我需要做一个jquery ajax调用。所以我认为我的onStudentChange()函数看起来像这样:

$.ajax({
    type : 'POST',
    url : 'get_registered_events.php',
    dataType : 'json',
    data: {
    studentid : $('#student').val()
    },
    success : function(data){
        // Do something once we get the data
        },
        error : function(XMLHttpRequest, textStatus, errorThrown) {
        // Display error
        }
        });

        return false;
});

所以我继续创建get_registered_events.php,我想返回学生注册的活动。

我的问题是,我对PHP没有经验,而且我很难弄清楚如何将数据库给我的数据返回给JSON格式的这个ajax调用。我的另一个障碍是我们学校使用的是旧版本的PHP,所以我必须使用这个PEAR JSON库。

这是我遇到问题的PHP文件:

<?php

if (!empty($_POST['studentid')) {

    include_once('JSON.php');
    $json = new Services_JSON();

    $dbconn = pg_connect("host=somehost dbname=somedb user=someuser password=somepassword") or die('Could not connect: ' . pg_last_error());
    $query = 'SELECT contest.id, contest.title, FROM contest, student_contest WHERE student_id = '.$_POST['studentid'].' AND contest.id = contest_id';
    $contests = pg_query($query) or die('Query failed: ' . pg_last_error());

    // Here I need to convert the rows of $contests (contest.id, contest.title), into JSON and return it to that ajax call.

}

?>

所以我的问题是,如何将$ contests(它的行)转换为JSON(contest.id,contest.title),并将其返回到将使其成为上面的ajax调用。

如果有人能指出我正确的方向,我会非常感激。

3 个答案:

答案 0 :(得分:4)

$myarray = array()
while ($row = pg_fetch_row($contests)) {
  $myarray[] = $row;
}

echo json_encode($myarray);

我认为这必须奏效。

答案 1 :(得分:3)

您也可以

$resultArray = pg_fetch_all($result);
echo json_encode($resultArray);

这会将每一行编码为JSON对象,并以列名作为键,并将所有行放在JSON数组中

只有在您确定查询将返回一小组数据时才执行此操作。如果您担心数据大小,请使用@ atif089但使用pg_fetch_assoc()代替pg_fetch_row()

答案 2 :(得分:0)

从postgresql 9.3你可以直接将结果作为带有json_agg的json数组得到:

With p as (
SELECT contest.id, contest.title, FROM contest, student_contest WHERE student_id = '.$_POST['studentid'].' AND contest.id = contest_id
)
select json_agg(p) as json from p;

http://www.postgresql.org/docs/9.3/static/functions-aggregate.html