[英]How to handle mysql connection exception in the simplest way
我试图弄清楚如何处理一个类中的mysql连接。 不必总是将其包装在if语句中。 这是一个示例,可以帮助您了解我要执行的操作。
class Database {
protected $conn;
protected $password;
protected $username;
protected $servername;
public function Database(){
$this->conn = new mysqli($this->servername,$this->username,$this->password);
}
public function scriptA(){
if ($this->conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else{
//do script A
return $result;
}
}
public function scriptB(){
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else{
//do script B
return $result;
}
}
}
如您所见,如果我要添加更多脚本,则必须添加很多if捕获来检查它是否已连接。 是否有类似php的函数异常处理程序? IE函数foo引发异常?
这是使用PDO处理异常的简单方法:
class Connection{
public $db;
protected $DB_HOST;
protected $DB_NAME;
protected $DB_USER;
protected $DB_PASSWORD;
function __construct($db_host,$db_name,$db_user,$db_password){
try{
$this->DB_HOST = $db_host;
$this->DB_NAME = $db_name;
$this->DB_USER = $db_user;
$this->DB_PASSWORD = $db_password;
$this->db = new pdo('mysql:host='.$this->DB_HOST.';dbname='.$this->DB_NAME,$this->DB_USER,$this->DB_PASSWORD);
}catch(PDOException $e){
die($e->getMessage());
}
}
}
$con = new Connection('db_host','db_name','db_user','db_password');
// display something else here in case connection succeded.
echo 'congratulation you are no connected to your database !';
在类方法中使用die()
是个坏主意 。 您的应用程序可能会因发送部分输出而意外停止,错误无法正确处理等。这就像您在脚本运行时在服务器上接通了电一样。 结果是不可预测的。 这里需要注意的一点是,当您拥有die()
语句时,将很难用单元测试来测试代码。 如果您愿意,我可以在这里列出更多问题。
发生错误时,PDO会引发异常 。 但是很可能您不需要在Connection
类中捕获异常,因为您不能在此类中处理异常。 您不能将错误发送给客户,也不能记录错误或回滚正在进行的活动或通知管理员等。您可能无法做任何事情,除非可能是由于其他异常。
我认为您需要检查您的应用程序,并在代码中捕获PDOException
,您才能真正做到这一点。 这很可能是由您的框架完成的,您需要更改框架的默认行为。 另一个选择是在负责某些业务逻辑的类中执行此操作。 在这种情况下,如果SQL失败,您可能会做一些不同的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.