【发布时间】:2016-01-25 18:08:48
【问题描述】:
我已经阅读了有关这些问题的几个关于 stackoverflow 的帖子:
- 我应该在“查询”函数内部还是周围使用 try-catch?
- 是否应该在每次查询执行时使用 try-catch?
而且,老实说,我不确定我是否理解答案——有人说是,有人说不是。所以,我想举一个实际的例子来说明我是怎么做的……如果你能给我这两个问题的答案。
数据库.php:
try {
$connection= new PDO(DB_DNS, DB_USER, DB_PASS);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(Exception $e) {
echo "Error: ".$e->getMessage();
die();
}
user.php:
class User {
public function pronadjiSveUsere() {
global $connection;
$sql= $connection->prepare("SELECT * FROM users");
$result = $sql->execute();
return $result ;
}
public function find_by_id($id=0) {
global $connection;
$sql= $connection->prepare("SELECT * FROM users WHERE id = :id");
$result = $sql->execute(array($id));
return $result->fetch(PDO::FETCH_OBJ);
}
}
如您所见 - 类用户有两种方法。我的问题是:
1.在这些情况下我应该使用 try-catch 吗? 2. 如果答案是肯定的 - 我应该放在方法中吗,例如:
public function find_by_id($id=0) {
try {
global $connection;
$sql= $connection->prepare("SELECT * FROM users WHERE id = :id");
$result = $sql->execute(array($id));
return $result->fetch(PDO::FETCH_OBJ);
} catch(Exception $e) {
echo $e->getMessage();
die();
}
}
或周围,每当我使用这些方法时,例如:
try {
user->find_by_id($id);
} catch(Exception $e) {
echo $e->getMessage();
die();
}
提前谢谢你!
【问题讨论】:
-
我会将它们放在函数中,这样您就不必在调用方法时一次又一次地编写它。附言不要在我们有属性的类中使用
global。 -
只是一个小点:PDO 生成一个
PDOException现在,如果不在catch (PDOException $e)中处理,这将回退到标准异常,但有时您可能想要区分标准异常和 PDOException .所以最好捕获 PDOException。这也使您的代码更具自我记录性。 -
考虑抛出异常或使用
trigger_error。 stackoverflow.com/questions/7063053/… -
在类中也使用
global完全破坏封装,不推荐
标签: php function pdo try-catch execute