我正在关注OOP mysqli课程。连接到数据库时,它们使用以下脚本:
$db = new mysqli("host", "user", "password", "database");
if ($db->connect_error){
$error = $db->connect_error;
echo("Not connected: " . $error);
}
稍后,他们使用try / catch块调用数据库连接文件:
try {
require_once "connection.php";
}catch (Exception $e){
$error = $e->getMessage();
echo $error;
}
尝试连接后,连接文件是否立即处理可能的连接错误? try / catch块基本上做同样的事情吗?或者是try / catch块是否在寻找不同类型的错误?
更新:在阅读了一些答案之后,请澄清一下。当我这样做时:
try {
$db = new mysqli("host", "user", "password", "database");
}catch (Exception $e){
$error = $e->getMessage();
echo $error;
}
假设数据库访问数据错误(例如错误的主机),我得到一个PHP警告但不是catch块中的错误输出。捕获器不应该检测到此错误吗?
答案 0 :(得分:3)
如果您需要使用try / catch块捕获mysqli扩展的异常,请尝试此代码(切换异常模式而不是经典错误报告):
// Method 1:
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ERROR;
// OR Method 2:
mysqli_report(MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ALL);
try {
$db = new mysqli("host", "user", "password", "database");
} catch (mysqli_sql_exception $e) {
...
}
答案 1 :(得分:1)
在使用if语句的代码的第一部分中,您正在检查是否有一个条件为真,然后输出您的消息。
try catch块基本上就像这样
try{
//place code here that could potentially throw an exception
}
catch(Exception $e)
{
//We will catch ANY exception that the try block will throw
}
所以你看到,当你的if语句正在检查你预期的条件时,try catch块会检测出任何出错的地方,即使那些你没有预料到的事情。 因此,在调试时,您可以更改catch块中的代码以处理您认为合适的异常
有关异常的更多信息,请参阅PHP文档 http://php.net/manual/en/language.exceptions.php
答案 2 :(得分:0)
您是否在询问与$db->connect_error
和try/catch
的不同之处?
$db->connect_error
主要是针对我们已经知道的错误(用户名不正确等)
和try/catch
与系统级相关,
PHP将搜索最近的try / catch块,
一旦抓到了什么东西,PHP仍会继续像以前一样,
但是,如果您没有任何try/catch
阻止和set_exception_handler()
,
PHP将停止错误。