当在PHP中与MySql数据库交互时,die()或try/catch


die() or try/catch when interacting with MySql database in PHP?

我读过的很多教程和书籍都使用了die()方法来捕获与本地MySQL数据库交互时的异常

例如:

mysql_connect($dbhost, $dbuser, $dbpass)or die(mysql_error());

try/catch块是否比die()方法更有利,或者这只是异常处理与db连接的标准方式?

or die()是一种非常原始的"处理"错误的方式,最多只能用于示例或调试。实际上,这取决于你如何处理你的错误。您可能希望从函数调用中return false,或者您可能希望抛出自己的异常;例如:

if (!$con = mysql_connect(..)) {
    throw new DatabaseConnectionError(mysql_error());
}

try..catch将完全不处理mysql,因为mysql从不抛出任何异常。它只在失败时返回false

您必须有自己的错误处理策略。您可能希望记录错误并显示用户友好的错误页面,而不是显示神秘的错误消息。mysql与那部分无关。它只给你一种检查操作是否成功的方法(检查它是否返回false);你如何处理这些信息取决于你自己。die终止整个应用程序,至少不允许问题进一步传播;但是它肯定不会显示任何用户友好的错误页面。

说了这么多,mysql是旧的和不赞成的。如果你想使用一些更新的东西,比如PDO,它可以自己正确地抛出异常。

mysql_connect方法不会抛出异常,因此die()被许多应用程序用于在没有可用连接时终止。你可以使用这里提到的解决方案:如何使用抛出异常在mysql数据库连接

包含为完整:

try
{
    if ($db = mysqli_connect($hostname_db, $username_db, $password_db))
    {
        //do something
    }
    else
    {
        throw new Exception('Unable to connect');
    }
}
catch(Exception $e)
{
    echo $e->getMessage();
}

或者使用新的更OOP风格的数据库访问:http://php.net/manual/en/book.pdo.php

很多应用程序使用die的原因是,它们非常依赖数据库,如果没有连接,继续是完全没有结果的。

Edit如注释中所述,上面的代码示例是为了说明目的。抛完球马上接球是没有意义的。