使用PDO连接到数据库

时间:2013-07-04 00:16:45

标签: php mysql database pdo mysqli

我正在尝试学习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

你可以帮我修复错误或告诉我正确的方法吗

4 个答案:

答案 0 :(得分:0)

问题在于

  1. 你试图在连接之前和try之外抛出异常。
  2. 没有必要抛出自己的异常,因为PDO throws its own exception if connection fails
  3. 你也考虑exception type
  4. 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();
}
?>
相关问题