使用 try catch 块时处理 PDO 错误的正确方法是什么?
目前我有这样的事情:
博客模型.php
class BlogModel extends Model {
public function save($id, $value) {
$stmt = $this->getDb()->prepare('UPDATE setting SET name = :name WHERE id = :id');
$stmt->bindParam(':id', $id);
$stmt->bindParam(':name', $values);
return ($stmt->execute() !== false) ? $id : false;
}
}
所以,在控制器中博客控制器.php,我会做这样的事情:
<?php
class Blog extends Controller {
public function comments()
{
$data = array();
$model = new BlogModel;
if ($model->save(2,'test')) {
$data['result']['message'] = 'Settings saved';
$data['result']['status'] = 'success';
} else {
$data['result']['message'] = 'Could not save the settings';
$data['result']['status'] = 'error';
}
$view = new View("view.php", $data)
$view->render();
}
}
?>
这是我处理 PDO 错误的方法if
状况。将其转换为 try catch 块的正确方法是什么?我不想对变量进行编码($data['result']['message']
$data['result']['status']
) 每时每刻。
是否可以以某种方式在 catch 块中添加“抛出异常”?
如果控制器中有很多 try catch 块,它会看起来很乱......对吗?
这里的答案都没有错。但实际上这三者结合起来才是真正的答案。
你绝对应该设置
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
正如所说Cerad.
从现在开始,有关数据库的所有问题都将通过类型异常引发PDOException
。你只是不必扔掉你自己的Exception
正如所说ladar因为它没用。只需采取ladar代码并将其转换为
...
$data = array();
$model = new BlogModel;
try{
$model->save(2,'test');
$data['result']['message'] = 'Settings saved';
$data['result']['status'] = 'success';
}catch(PDOException $e){
$data['result']['message'] = 'Could not save the settings';
$data['result']['status'] = 'error';
}
并且不要自己扔任何东西。
那么调试 PDO 查询的一个非常好的方法是使用由以下链接链接的 catch 脚本Basic你可以找到here http://www.php.net/manual/en/class.pdoexception.php#99518再次。
将这些东西结合在一起,您将拥有一种灵活、干净且易于调试的方法来捕获所有可能出现的错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)