【发布时间】:2013-11-18 06:14:47
【问题描述】:
目前,当我的 SQL 出现错误时,它会抛出如下所示的传统错误:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax...|
我知道我可以通过将每个 SQL 例程包装在 try/catch 块中来实现我想要的,但这似乎有点冗长:
class ProductsModel extends Model {
function __construct()
{
parent::__construct();
}
public function setName($name, $productId)
{
$SQL = 'UPDATE products SET name = ? WHERE id = ?';
try{
$r = $this->db->prepare($SQL);
$r->execute(array($name, $productId));
}catch(PDOException $e) {
echo 'Error!';
}
}
}
有没有办法为所有 SQL 查询自动完成这项工作?
【问题讨论】:
-
为什么客户端知道它正在发生 SQL 查询这一事实?您真正想向客户传达什么?如果您想指示失败返回 500 服务器错误状态代码 - 使用状态代码客户端不应该知道服务器内部。此外,像这样捕获和抑制所有错误是非常糟糕的做法。相反,如果它们异常处理它们,则在调用 setName 的代码中处理它们,或者以一种传达它失败的方式定义合同是一个合法的结果(让它返回一个布尔值)例如。盲目压制总是不好的。
-
老兄,您接受了与您的问题相矛盾的答案。 -1
-
@YourCommonSense 我会接受你的回答,因为它更具教育意义,但它已被锁定:/
-
最好接受韦恩的说法——他是第一个直接准确回答你的问题的人——“如何在一个地方进行任何异常处理”——正是你所要求的。
标签: php mysql pdo error-handling