Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将MySQL转换为Json结果集_Php_Mysql_Json - Fatal编程技术网

Php 将MySQL转换为Json结果集

Php 将MySQL转换为Json结果集,php,mysql,json,Php,Mysql,Json,我试图将结果转换为json编码的字符串。我知道现在使用外部api似乎有点多,但我确实认为随着时间的推移,它会派上用场。目前,我使用以下功能: //API Details public function APIReturnMembers() { $query = <<<SQL SELECT uname FROM {$this->tprefix}accounts SQL; $encode = array();

我试图将结果转换为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);  
} 
当我看到我欣喜若狂!我正在实现我自己的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档案上找到。或者如果你已经知道答案那也太好了

数组中编号的行作为结果集的数组索引。如果使用
print\r($encode);退出echo-json\u-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对象。

在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;
}
$result = $this->ExecuteCurl('api.php?query=members');
print_r($result);
调用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;
}
$result = $this->ExecuteCurl('api.php?query=members');
print_r($result);

在这里,$result将包含json对象

我想您只需要
echo$member['uname']
。当您将json_字符串转换为php实体时,您将其设置为数组而不是std php对象。我不知道你说“额外号码”是什么意思。数字是数组的索引,它们从0开始并继续。它们与普通数组一起隐含,因此有时会被忽略。