目前,当我的SQL出错时,它会抛出如下所示的传统错误:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax...|
我知道我可以通过在try / catch块中包装每个SQL例程来实现我想要的东西,但这似乎有点长篇大论:
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查询自动完成?
答案 0 :(得分:8)
是的,不,你不应该这样做。
与catch块。即:
try {
$productsModel->setName("name", 42);
}
catch (PDOException $e) {
//Do something, 500 error code, whatever
}
那是因为,只有在您尝试访问数据库时才知道您想要做什么,以防它失败。
此:
答案 1 :(得分:4)
您可以设置exception handler。
<?php
function exception_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('Uncaught Exception');
echo "Not Executed\n";
?>
它将捕获所有异常类型,而不仅仅是PDOExceptions。如果您想专门处理所有PDOExceptions,可以这样检查:
function exception_handler($exception) {
if ($exception instanceof PDOException) {
echo 'This is a PDOException';
}
}
答案 2 :(得分:-1)
实现自己的类PDO类:
class MYPDO extends PDO {
public function query() {
try {
call_user_func_array(array($this, 'parent::query'), func_get_args());
}catch(PDOException $e) {
echo 'Error!';
}
}
}
$db = new MYPDO(...);
$db->query(...);