如何使用PHP从MySQL表中检索JSON数据?

如何使用PHP从MySQL表中检索JSON数据?,php,mysql,json,Php,Mysql,Json,预期的JSON: { id: 1, name: "Sony Xperia Z3", price: 899, specs: { manufacturer: "Sony", storage: 16, os: "Android", camera: 15 }, description: " WOW", rating: 4, image: {

预期的JSON:

{
    id: 1,
    name: "Sony Xperia Z3",
    price: 899,
    specs: {
            manufacturer: "Sony",
            storage: 16,
            os: "Android",
            camera: 15
    },
    description: " WOW",
    rating: 4,
    image: {
            small: "assets/images/sony-xperia-z3.jpg",
            large: "assets/images/sony-xperia-z3-large.jpg"
    }
    }
MySQL表:

CREATE TABLE IF NOT EXISTS `phones` (
  `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `price` int(11) NOT NULL,
  `manufacturer` varchar(100) NOT NULL,
  `storage` tinyint(4) NOT NULL,
  `os` varchar(100) NOT NULL,
  `camera` tinyint(4) NOT NULL,
  `description` varchar(400) NOT NULL,
  `rating` tinyint(4) NOT NULL,
  `image_small` varchar(200) NOT NULL,
  `image_large` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;`
我的PHP代码:

<?php
    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/json; charset=UTF-8");    
    $conn = new mysqli("localhost", "root", "", "php_test");    
    $result = $conn->query("SELECT id, name,price,manufacturer,storage,os,camera,description FROM phones");

    $outp = "[";
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($outp != "[") {$outp .= ",";}

    $outp .= '{"id":"'  . $rs["id"] . '",';
    $outp .= '"name":"' . $rs["name"]   . '",'; 
    $outp .= '"price":"' . $rs["price"]   . '",'; 
    $outp .='"specs:"'.'{"manufacturer":"'. $rs["manufacturer"].'"}'.'",'; 
    $outp .= '"storage":"' . $rs["storage"]   . '",'; 
    $outp .= '"os":"' . $rs["os"]   . '",'; 
    $outp .= '"camera":"' . $rs["camera"]   . '",'; 
    $outp .= '"description":"'. $rs["description"]     . '"}'; 

}
$outp .="]";

$conn->close();
echo($outp); 
//echo json_encode($outp); 
?>

使用
当您有一个数组时,只需使用json_encode将数组转换为json即可

    $outp = array();
    while($rs = $result->fetch_array(MYSQLI_ASSOC)) {  
        $outp[]['id'] =  $rs['id']; 
        // assign all data you need e.g name, description etc
       $outp[]['specs'] = array('manufacturer' => $res['manufacturer'], 'storage' => $res['storage'], 'os' => $res['os'], 'camera' => $res['camera']);
    }
    $conn->close();
    echo json_encode($outp);

这会解决你的问题

<?php   
    $conn = new mysqli("localhost", "root", "", "php_test");    
    $result = $conn->query("SELECT * FROM phones");
    $array_main = array();
    $arr_row = array();
    $arr_images = array();
    $counter = 0;
    while($results = $result->fetch_array(MYSQLI_ASSOC)) {
        $arr_row[$counter] = $results;
        $arr_row[$counter]['specs'] = array();
        $arr_row[$counter]['specs']['manufacturer'] = $arr_row[$counter]['manufacturer'];
        $arr_row[$counter]['specs']['storage'] = $arr_row[$counter]['storage'];
        $arr_row[$counter]['specs']['os'] = $arr_row[$counter]['os'];
        $arr_row[$counter]['specs']['camera'] = $arr_row[$counter]['camera'];
        $arr_row[$counter]['images'] = array();
        $arr_row[$counter]['images']['small'] = $arr_row[$counter]['image_small'];
        $arr_row[$counter]['images']['large'] = $arr_row[$counter]['image_large'];      
        unset($arr_row[$counter]['manufacturer']);
        unset($arr_row[$counter]['storage']);
        unset($arr_row[$counter]['os']);
        unset($arr_row[$counter]['camera']);
        unset($arr_row[$counter]['image_small']);
        unset($arr_row[$counter]['image_large']);
        $array_main[$counter] = $arr_row[$counter];
        $counter++;
    }

$conn->close();
echo(json_encode($array_main));  
?>

代码说明:
在主数组中有两个json数组。所以我创建了两个数组,叫做spec,images。然后我将数据值添加到这些数组中。最后,我从arr_行数组中删除前面的元素,并将创建的两个数组添加到其中。

我知道我希望在json数组中的多个列中使用它。像这样的规格:{制造商:“索尼”,存储:16,操作系统:“安卓”,相机:15},那么你应该制作一个嵌套数组。。我正在编辑我的答案,谢谢它的工作。在您编辑的答案中,$res['manufacturer']应更改为$rs['manufacturer']