1

我正在使用 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 格式打印。谢谢!

4

1 回答 1

2

没关系。虽然我会用奥卡姆剃刀切出一个物体。

此外,您的代码略有错误和多余。这是一个正确的版本

$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() 调用也没有用。
  • 当然,捕捉异常是多余的、不安全的和不可靠的。
于 2013-05-31T08:01:07.367 回答