这是我的代码:
<?php
try{
// connect to database and select database
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "spy";
$dbh_conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$dbh_conn->exec("set names utf8");
$dbh_conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
我的代码也适用。但是我看到了类似的代码来检查这样的连接:
if ( !$dbh_conn ){
// Something Went Wrong
} else {
// All Fine
}
我需要这个条件吗?或者使用try catch
足以检查数据库连接?
答案 0 :(得分:1)
这取决于您为PDO::ATTR_ERRMODE
设置的内容。在您的情况下,它被设置为PDO::ERRMODE_EXCEPTION
,因此错误将引发异常。
$dbh_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
但是,当您连接时(即__constructor()
中调用PDO
时),此错误模式不会应用,因为始终会抛出PDOException
:
如果连接失败,PDO :: __ construct()将始终抛出PDOException,无论当前设置了哪个PDO :: ATTR_ERRMODE。未捕获的例外是致命的。
您可以阅读有关不同模式的here。