将MySQL转换为Json ResultSet

时间:2016-01-25 04:20:16

标签: php mysql json

我正在尝试将结果转换为json编码的字符串。我知道现在正在研究一个外部api似乎有点多,但我认为随着时间的推移它会派上用场。目前,我使用以下功能:

//API Details
public function APIReturnMembers() {
    $query = <<<SQL
        SELECT uname
            FROM {$this->tprefix}accounts
SQL;
    $encode = array();

    $resource = $this->db->db->prepare( $query );
    $resource->execute();
    foreach($resource as $row) {
        $encode[] = $row;
    }
    echo json_encode($encode);  
} 

就返回结果而言,它做了它应该做的事情,例如:

[{"uname" : "guildemporium"}, {"uname" : "doxramos"}]

当我看到我欣喜若狂!我正在实现自己的API,其他人可以在以后使用它,因为我实际上到了某个地方!当然,我已经打了个蠢蛋。测试我的API。 运行代码以获得我使用的结果

$api_member_roster = "https://guildemporium.net/api.php?query=members";
$file_contents = @file_get_contents($api_member_roster); // omit warnings
$memberRoster = json_decode($file_contents, true);
print_r($memberRoster);

好消息! 有用。我得到了一个结果,耶!

现在坏了。 我的结果是

[
    0 => ['uname' => 'guildemporium'],
    1 => ['uname' => 'doxramos']
]

所以我有一个很好的小数字整数打断了我的回报,所以我不能用我原来的想法

foreach($memberRoster as $member) {
        echo $member->uname;
}

这个额外数字来自哪里?它是否会破坏我的生活,还是我第一次想到将结果归还给另一个成员?下次在X档案中查找。或者,如果你已经知道答案也很棒!

2 个答案:

答案 0 :(得分:0)

数组中的编号行作为结果集的数组索引。如果您在脚本中使用print_r($encode);exit;之前使用echo json_encode($encode);,则应该看到完全相同的输出。

创建PHP数组时,默认情况下,所有索引都是从零开始递增的编号索引。您可以使用数字和字母的混合数组索引,但如果您坚持使用仅编号的索引或自然大小写英语索引,那么它会更好(主要是为了您自己的理智),您可以像对象一样使用数组,例如。

$arr = [
    'foo' => 'bar',
    'bar' => 'foo'
];

print_r($arr);
/*Array
(
    [foo] => bar
    [bar] => foo
)*/

$arr = [
    'foo','bar'
];

/*Array
(
    [0] => foo
    [1] => bar
)*/

注意输出的差异?至于你的上一个问题;没有。这是正常和预期的行为。消费者将遍历数组,很可能在PHP中使用foreach,在其他语言中使用for (x in y)

您正在做的是:

$arr = [
    ['abc','123']
];

这给了你:

Array
(
    [0] => Array
        (
            [0] => abc
            [1] => 123
        )
)

为了使用$member->foo($bar);,您需要反序列化json对象。

答案 1 :(得分:0)

在你自己的api中,你可以在json对象中返回响应

在您的api.php中

function Execute($data){
    // Db  Connectivity
    // query
    $result = mysqli_query($db, $query);

    if( mysqli_num_rows($result) > 0 ){
        $response = ProcessDbData($result);
    }else{
        $response = array();
    }
    mysqli_free_result($result);
    return $response;
}

function ProcessDbData($obj){
    $result = array();
    if(!empty($obj)){
        while($row = mysqli_fetch_assoc($obj)){
            $result[] = $row;
        }
        return $result;
    }
    return $result;
}

function Convert2Json($obj){
    if(is_array($obj)){
        return json_encode($obj);
    }
    return $obj;
}

调用api.php

$result = $this->ExecuteCurl('api.php?query=members');
print_r($result);

这里你$ result将包含json对象