我读过的很多教程和书籍都使用了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如注释中所述,上面的代码示例是为了说明目的。抛完球马上接球是没有意义的。