我使用PDO从mysql表中抓取记录。数据将使用json_encode()进行编码,并通过API的Slim框架进行打印:
$app->get('/get/profile/:id_user', function ($id_user) use ($app) {
$sql = 'SELECT * FROM user WHERE id_user = :id_user';
try {
$stmt = cnn()->prepare($sql);
$stmt->bindParam(':id_user', $id_user, PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetch(PDO::FETCH_ASSOC); // THIS!!!
if($stmt->rowCount()) {
$app->etag(md5(serialize($data)));
echo json_encode($data,JSON_PRETTY_PRINT);
} else {
$app->notfound();
}
} catch(PDOException $e) {
echo $e->getMessage();
}
});
应该用
吗?$data = $stmt->fetch(PDO::FETCH_ASSOC);
或
$data = $stmt->fetchObject();
?作为对象获取数据有什么直接好处吗?我读过一些例子,但他们从来没有解释为什么。结果数据的唯一用途是以JSON格式打印它。谢谢!
没关系。虽然我会用奥卡姆剃刀剪掉一个东西。
你的代码也有一点错误和冗余。以下是正确的版本
$sql = 'SELECT * FROM user WHERE id_user = :id_user';
$stmt = cnn()->prepare($sql);
$stmt->bindParam(':id_user', $id_user, PDO::PARAM_INT);
$stmt->execute();
if ($data = $stmt->fetch()) {
$app->etag(md5(serialize($data)));
echo json_encode($data,JSON_PRETTY_PRINT);
} else {
$app->notfound();
}
- 如果可以全局设置,那么为每个查询设置获取模式是没有意义的。
- numrows()调用也是无用的。
- ,当然捕获异常是多余的,不安全的和不可靠的。