Php 将MySQL转换为Json结果集
我试图将结果转换为json编码的字符串。我知道现在使用外部api似乎有点多,但我确实认为随着时间的推移,它会派上用场。目前,我使用以下功能: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();
//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开始并继续。它们与普通数组一起隐含,因此有时会被忽略。