什么时候应该使用 PDO 使用 `try` 和 `catch` 来准备和执行?

Tom*_*Tom 3 php pdo exception

我已经使用 PDO 几年了,但我从未充分研究过何时应该使用try和准备和执行catch

我的理解是,当数据可能包含用户输入时,您应该使用tryand 。catch

所以这个例子的代码是安全的:

public function getDetails($filename, $what){
    $query = $this->handler->prepare('SELECT * FROM videos WHERE v_fileName = :v_fileName');
    try{
        $query->execute([
            ':v_fileName' => $filename
        ]);
    }catch(PDOException $e){
        return $e->getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

$filename在此示例中,内容来自 URL。

例如,当没有从 URL 中获取任何内容时,它也会完全保存:

$query = $this->handler->prepare('SELECT * FROM videos WHERE u_id = :u_id ORDER BY v_id LIMIT :climit,1');
$query->execute([
    ':u_id'     => $this->user->getChannelId($userid),
    ':climit'   => $optional[1]
]);

$fetch = $query->fetch(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

我对准备陈述的理解是否正确?如果不正确,我该怎么做?

Dha*_*man 5

仅当您有充分的理由时才这样做。

这不仅仅适用于 PDO 例外。对于任何例外情况也是如此。仅当您的代码可以从中恢复并执行其他操作时才捕获异常。

仅仅捕获异常echoreturn $e->getMessage();不是一个有效的原因。您的代码无法从问题中恢复,您只是阻碍了异常。

您可能想要恢复的一个很好的例子是,如果您正在使用数据库事务,并且在发生故障时,您想要回滚并执行其他操作。您可以调用PDO::rollBack()您的代码catch,然后让您的代码执行一些替代逻辑。

Try-catch 不是一种安全措施。它与用户输入无关。它仅在您预计代码会失败但您有 B 计划来处理这种情况的情况下使用。

有关更多信息,您可以阅读我的 PDO 语句不起作用和文章PHP 错误报告