我正在尝试学习PDO
我已将此代码连接到数据库
<?php
$dbhost = "localhost";
$dbname = "testcreate";
$dbuser = "root";
$dbpass = "mysql";
if (!$db) {
throw new Exception('failed to connect to mysql')
}
try {
$db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf8', ''.$dbuser.'', ''.$dbpass.'');
} catch (MyFunkyException $e) {
echo "Caught exception : ", $e->getMessage();
}
?>
连接有效,但是当我尝试发生错误并且我想捕获错误时
此错误弹出
Fatal error: Uncaught exception 'Exception' with message 'failed to connect to mysql' in C:\Program Files (x86)\Ampps\www\test.php:8 Stack trace: #0 {main} thrown in C:\Program Files (x86)\Ampps\www\test.php on line 8
你可以帮我修复错误或告诉我正确的方法吗
答案 0 :(得分:0)
问题在于
try {
$db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf8', ''.$dbuser.'', ''.$dbpass.'');
} catch (PDOException $e) {
echo "Caught exception : ", $e->getMessage();
}
此外,无需在异常上关闭PDO以捕获异常。但是,如果您正在尝试to handle errors with exceptions,则必须在建立连接后立即启用该功能。
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
答案 1 :(得分:0)
问题是你不想抓住任何东西 至少在您希望它只是回显错误信息之前。
此外,异常与PDO语法无关。
答案 2 :(得分:-1)
这里的真正问题在于:
} catch (MyFunkyException $e) {
MyFunkyException
是您要捕获的异常类型的类名
PDO不会抛出MyFunkyException
异常 - the docs表示它会抛出PDOException
异常。
您可以通过更改以下行来解决此问题:
} catch (PDOException $e) {
或者通过捕捉所有异常而不管其类型如何:
} catch (Exception $e) {
答案 3 :(得分:-2)
尝试使用以下代码
<?php
$dbhost = "localhost";
$dbname = "testcreate";
$dbuser = "root";
$dbpass = "mysql";
try {
$db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf8', $dbuser, $dbpass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>