在PHP中尝试/捕获

时间:2014-12-07 17:16:53

标签: php mysqli try-catch

我正在关注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块中的错误输出。捕获器不应该检测到此错误吗?

3 个答案:

答案 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) {
    ...
}

mysqli_sql_exception mysqli_driver

答案 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_errortry/catch的不同之处?

$db->connect_error主要是针对我们已经知道的错误(用户名不正确等)

一旦发生错误,

try/catch系统级相关,

PHP将搜索最近的try / catch块,

一旦抓到了什么东西,PHP仍会继续像以前一样,

但是,如果您没有任何try/catch阻止和set_exception_handler()

PHP将停止错误。