带有JSON的MYSQL表只返回第一条记录

时间:2017-11-03 01:05:43

标签: php mysql json slim

我有一个带有"项目"的MYSQL表。我存储JSON对象的列。出于某种奇怪的原因,只返回第一条记录。例如:我基于" owner_id"获取,无论owner_id是第一条记录(1,6,9,263 ......等等),它总是只返回第一条记录。但是如果这个owner_id有其他"项目"在这张表中,它们也被退回。奇怪。

表示例:

id:  |  owner_id:  |  items:
----------------------------------
1    |  1          |  {
                         "items": [{
                            "q": "1",
                            "d": "I'd rather be a bird than a fish.",
                            "u": "637.30"
                         },
                         {
                            "q": "6",
                            "d": "Christmas is coming.",
                            "u": "844.57"
                          }
                         ]
                       }
----------------------------------
2    |  11         |   {
                         "items": [{
                            "q": "4",
                            "d": "I often see the time 12:34.",
                            "u": "85.85"
                         },
                         {
                            "q": "6",
                            "d": "Wow, does that work?",
                            "u": "286.27"
                          }
                         ]
                       }

如果我删除了items列,那么我可以检索任何没有问题的记录请求。

应该注意我使用Slim来发出db请求。 以下是请求/查询的代码:

$app->get('/api/items/{id}', function(Request $request, Response $response){
   $id = $request->getAttribute('id');
   $sql = "SELECT * FROM items WHERE owner_id = $id";

   try{

      $db = new db();
      $db = $db->connect();

      $stmt = $db->query($sql);
      $invoices = $stmt->fetchAll(PDO::FETCH_OBJ);
      $db = NULL;

      echo json_encode($invoices);

   } catch(PDOException $e){

      echo '{"error": {"text": ' . $e->getMessage() . '} }';

   }
});

知道发生了什么,为什么我不能得到表中的其他记录?

谢谢,

-S

2 个答案:

答案 0 :(得分:0)

上面的解决方案无法正常工作,因为您正在请求单个mysql列,并且json id与mysql无关。

我修改了它以满足您的需求

$db = new db();
$db = $db->connect();

$stmt = $db->query($sql);
$invoices = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = NULL;

// to get individual json
// loop through 
// assuming you want the first data 
$arr = json_decode($invoices[0]->items);



// all single data
echo json_encode($arr);

// or get single
$id = 6; // can be added dynamically

$json = '';
foreach($arr as $i => $val){
    if($val['items']['q'] === $id){
        $json =  json_encode($val);
    }
}

// individual json
echo json_encode($json);

答案 1 :(得分:0)

谢谢大家的时间和精力。最后,这对我来说是一个愚蠢的错误...我在“items”字段中为省略号和撇号设置了一些特殊的html字符,这导致了某种故障。