【问题标题】:how to encode multiple rows from mysql into json using php如何使用php将mysql中的多行编码为json
【发布时间】:2013-09-18 19:06:54
【问题描述】:

我正在尝试将从数据库获取的所有数据行编码为 JSON,然后在客户端对其进行处理,但我似乎无法让它工作..我的代码在下面

function getTopic($conn){
    $response = array("error" => 0);
    $qry = "SELECT original_title, content, time FROM topic WHERE vis = 1";
    $result = $conn->prepare($qry);
    $result->execute();
    if($result->rowCount() > 0){
        $output = $result->fetchall();
        $response['text'] = $output['original_title'];
        $response['test'] = $output['content'];
        return json_encode($response);
        //return $output;
    }

然后我尝试打印 var_dump($response) 但我得到空值.. 虽然如果我 var_dump($output) 我得到一个数组中的所有行.. 访问数组是现在的问题..i想想

注意:我正在使用 PDO

【问题讨论】:

    标签: java php android mysql json


    【解决方案1】:

    问题是 $output 是一个你需要经过的数组。喜欢:

    function getTopic($conn){
        $response = array("error" => 0);
        $qry = "SELECT original_title, content, time FROM topic WHERE vis = 1";
        $result = $conn->prepare($qry);
        $result->execute();
        if($result->rowCount() > 0){
            $output = $result->fetchall();
            foreach ($output as $o){
               $response['text'] = $o['original_title'];
               $response['test'] = $o['content'];
            }
            return json_encode($response);
        }
    }
    

    这是最后一个响应,但如果您想要全部,请执行以下操作:

    function getTopic($conn){
        $response = array('error'=>0);
        $qry = "SELECT original_title, content, time FROM topic WHERE vis = 1";
        $result = $conn->prepare($qry);
        $result->execute();
        if($result->rowCount() > 0){
            $output = $result->fetchall();
            foreach ($output as $o){
               $response[] = array('text'=>$o['original_title'],'test'=>$o['content']);
            }
            return json_encode($response);
        }
    }
    

    如果您只想要一行,请为您的 MySQL 语句添加限制。

    【讨论】:

    • OP 没有提到他使用的是什么——mySQLi 或 PDO。
    • 感谢您的回复...但它仍然给出相同的错误..ie 注意:未定义的索引:第 58 行 C:\wamp\www\api\include\functions.php 中的 original_title :未定义索引:C:\wamp\www\api\include\functions.php 中的 original_title 第 59 行中的行 where '$response['text'] = $output['original_title']; $response['test'] = $output['content'];'
    • 上面的 $response 将只包含最后一个 $output 记录。可能想要使用类似 $response[] = array('text'=>$output['original_title'],'test'=>$output['content']);
    • 对不起,我在代码中犯了一个错误,现在试试。这只会得到上述用户提到的最后一行。如果您愿意,可以像上面那样做出一系列响应。
    【解决方案2】:

    $output 是结果数组。使用一个循环,或者如果你只需要一行你需要这样做:

    function getTopic($conn){
    $response = array("error" => 0);
    $qry = "SELECT original_title, content, time FROM topic WHERE vis = 1";
    $result = $conn->prepare($qry);
    $result->execute();
    if($result->rowCount() > 0){
        $output = $result->fetchall();
        $response['text'] = $output[0]['original_title'];
        $response['test'] = $output[0]['content'];
        return json_encode($response);
        //return $output;
    }
    

    【讨论】:

    • 如果你只想要第一行的话。
    • 真的!如果只有一行。
    猜你喜欢
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多