如果发生pdo异常,是否可以执行剩余的代码?
Is it possible to execute the remaining code if pdo exception is occurred?
我有一个 config.php 文件如下:
//file name: config.php -------------
define ("DOMAIN","mydomain.com");
//connection parameters
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo "Database connected successfully!";
} catch (PDOException $e) {
throw new PDOException($e->getMessage());
}
现在我已将此文件包含在 index.php 中,如下所示:
//file name: index.php -----------
require_once("../path to/config.php");
echo "WELCOME to <h1 style='display:inline;color:#000080;'>".DOMAIN."</h1>";
如您所见,凭据是假的,将无法连接到数据库,因此错误消息显示如下:
Fatal error: Uncaught PDOException: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO) in /home/hosting_account/path to/config.php:20 Stack trace: #0 /home/hosting_account/public_html/index.php(22): require_once() #1 {main} thrown in /home/hosting_account/path to/config.php on line 20
我在这里删除了实际路径,但提到了路径的布局。一切正常..报错也正常
但我想要的是,index.php的第一行将是executing/showing(欢迎使用mydomain.com)即使有一部分(这里是连接部分)包含的文件。由于定义域并从 index.php 回显它没有错误,我希望它显示“欢迎使用 mydomain.com”,然后显示从 pdo 连接捕获的错误消息。
怎么做?
您不应在生产服务器上显示任何错误 - 您应该将其记录下来。如果你没有使用任何框架,你可以简单地将它保存到文件而不是显示它 - 在 catch
块中完成所有这些。
此外,您又一次捕获并抛出相同的异常。
} catch (PDOException $e) {
throw new PDOException($e->getMessage());
}
请根据您的需要编辑此部分以进行处理。
//file name: config.php -------------
define ("DOMAIN","mydomain.com");
//connection parameters
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$pdo_error = 0;
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo "Database connected successfully!";
} catch (PDOException $e) {
//throw new PDOException($e->getMessage());
$pdo_error = 1;
$error_message = $e->getMessage();
}
然后
//file name: index.php -----------
require_once("../path to/config.php");
echo "WELCOME to <h1 style='display:inline;color:#000080;'>".DOMAIN."</h1>";
if($pdo_error){
throw new PDOException($error_message);
}
我有一个 config.php 文件如下:
//file name: config.php -------------
define ("DOMAIN","mydomain.com");
//connection parameters
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo "Database connected successfully!";
} catch (PDOException $e) {
throw new PDOException($e->getMessage());
}
现在我已将此文件包含在 index.php 中,如下所示:
//file name: index.php -----------
require_once("../path to/config.php");
echo "WELCOME to <h1 style='display:inline;color:#000080;'>".DOMAIN."</h1>";
如您所见,凭据是假的,将无法连接到数据库,因此错误消息显示如下:
Fatal error: Uncaught PDOException: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO) in /home/hosting_account/path to/config.php:20 Stack trace: #0 /home/hosting_account/public_html/index.php(22): require_once() #1 {main} thrown in /home/hosting_account/path to/config.php on line 20
我在这里删除了实际路径,但提到了路径的布局。一切正常..报错也正常
但我想要的是,index.php的第一行将是executing/showing(欢迎使用mydomain.com)即使有一部分(这里是连接部分)包含的文件。由于定义域并从 index.php 回显它没有错误,我希望它显示“欢迎使用 mydomain.com”,然后显示从 pdo 连接捕获的错误消息。
怎么做?
您不应在生产服务器上显示任何错误 - 您应该将其记录下来。如果你没有使用任何框架,你可以简单地将它保存到文件而不是显示它 - 在 catch
块中完成所有这些。
此外,您又一次捕获并抛出相同的异常。
} catch (PDOException $e) {
throw new PDOException($e->getMessage());
}
请根据您的需要编辑此部分以进行处理。
//file name: config.php -------------
define ("DOMAIN","mydomain.com");
//connection parameters
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$pdo_error = 0;
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo "Database connected successfully!";
} catch (PDOException $e) {
//throw new PDOException($e->getMessage());
$pdo_error = 1;
$error_message = $e->getMessage();
}
然后
//file name: index.php -----------
require_once("../path to/config.php");
echo "WELCOME to <h1 style='display:inline;color:#000080;'>".DOMAIN."</h1>";
if($pdo_error){
throw new PDOException($error_message);
}