我有一个带有"项目"的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
答案 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字符,这导致了某种故障。