php - 当数据库关闭时捕获 'PDOException'

标签 php mysql oop pdo exception

如果我无法连接到数据库(例如 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/

相关文章:

php - 更新脚本中所需的 ID 未存储(甚至未看到!?)

php - 数组键作为用于插入的 mysql 列名?

php - 在不同表中的连接上得到错误的结果

linux - 使用来自另一个类的条目将项目添加到列表框

c# - 如何向 Linq 表达式添加排序规则?

c++ - 构造函数定义 C++ 语法

php - 路由 [登录名] 未定义

php - 谷歌组合图问题

php - 如何在 PHP 中禁用 'e' PREG_REPLACE_EVAL 修饰符?

mysql 查询比较 MAX 值和给定的参数,如果 max 等于给定的一,则返回 0 或 1