如果我无法连接到数据库(例如 xamp 关闭或数据库连接关闭等),我会 try catch 错误。我尝试使用 PDO::errorCode()
但没有产生结果。
在我的php中,我有一个connection.php和一个方法'来多次连接到数据库并返回一个新的PDO实例以实现各种查询。响应显示错误消息,然后显示调用它的所有 php 查询,其中还包括非加密格式的数据库名称和密码。
- 如何捕获此错误并将此错误消息替换为人类可读的替代消息(不显示名称和密码)?
连接.PHP
function connect()
{
// set database server access variables:
$host = "localhost";
$user = "root";
$pass = "password";
$dbase = "dbName";
//Establish a connection
$db = new PDO("mysql:host=".$host."; dbname=".$dbase."", $user, $pass); //line 16
$db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
return $db;
}
回应
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it. ' in D:\Users\Username\Dropbox\Web\htdocs\sitename\php\data\connection.php:16 Stack trace: #0 D:\Users\Username\Dropbox\Web\htdocs\sitename\php\data\connection.php(16): PDO->__construct('mysql:host=loca...', 'root', 'password') #1 D:\Users\Username\Dropbox\Web\htdocs\sitename\php\function\active-user.php(28): connect() #2 D:\Users\Username\Dropbox\Web\htdocs\sitename\map-floorplan.php(10): include('D:\Users\Username...') #3 {main} thrown in D:\Users\Username\Dropbox\Web\htdocs\sitename\php\data\connection.php on line 16
最佳答案
执行 try/catch 来捕获异常
try{
$db = new PDO("mysql:host=".$host."; dbname=".$dbase."", $user, $pass); //line 16
$db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
return $db;
} catch( PDOException $e){
$originalError = $e->getMessage();
echo 'something went wrong.. '.$originalError;
exit;
}
关于php - 当数据库关闭时捕获 'PDOException',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33982525/