我已经使用PDO已有两年了,但是对于何时应该使用try
and准备和执行,我从未进行过充分的研究catch
。
我的理解是,你应该使用try
与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();
}
}
$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);
我对准备陈述的理解是否正确?如果不正确,我应该怎么做?
仅当您有充分理由这样做时。
这不仅适用于PDO例外。任何例外情况都一样。仅当您的代码可以从中恢复并执行其他一些操作时,才捕获该异常。
捕获异常只是出于echo
或return $e->getMessage();
不是合理的原因。您的代码无法从问题中恢复,您只是在处理异常。
关于何时恢复的一个很好的例子是,如果您正在使用数据库事务,并且在失败的情况下,您想要回滚并执行其他操作。您可以调用PDO::rollBack()
,catch
然后使您的代码执行某些替代逻辑。
尝试捕获不是安全措施。它与用户输入无关。它仅在您希望代码失败但有计划B可以处理这种情况的情况下使用。
有关更多信息,您可以阅读“我的PDO语句不起作用”和“ PHP错误报告”一文。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句