【发布时间】:2017-11-03 11:10:28
【问题描述】:
我有一个 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 来发出数据库请求。 这是请求/查询的代码:
$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
【问题讨论】:
-
这是一个拼写错误,还是您的数据库列真的称为 owner_Id 并带有大写 I 而您的 sql 查询指定 owner_id 带有小写 i?
-
仅供参考:您容易受到 SQL 注入攻击。请改用准备好的语句。
-
@miknik 错字...应该是 owner_id。
-
@Ivar 是的,我知道这一点。感谢您的关心。
-
为了测试,您是否尝试从
fetchAll中省略PDO::FETCH_OBJ并查看它返回的内容?