簡體   English   中英

使用PDO連接到數據庫

[英]connection to the database using PDO

我正在嘗試學習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

您能幫我解決錯誤還是向我展示正確的方法

問題是

  1. 您正在嘗試在連接之前和嘗試之外引發異常。
  2. 不需要拋出自己的異常,因為如果連接失敗, PDO 會拋出自己的異常
  3. 您也可以考慮使用異常類型
try {
    $db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf8', ''.$dbuser.'', ''.$dbpass.'');
} catch (PDOException $e) {
    echo "Caught exception : ", $e->getMessage();
}

同樣,也無需打開PDO的異常來捕獲異常。 但是,如果您嘗試處理帶有異常的錯誤,則必須在建立連接后立即打開該功能。

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

問題是,你不想趕什么。
至少直到您只希望它回顯錯誤消息為止。

另外,異常與PDO語法無關。

真正的問題在這里:

} catch (MyFunkyException $e) {

MyFunkyException是您要捕獲的異常類型的類名。
PDO不會引發MyFunkyException異常- 文檔指出它會引發PDOException異常。

您可以通過更改如下行來解決此問題:

} catch (PDOException $e) {

或通過捕獲所有異常,而不管類型如何,如下所示:

} catch (Exception $e) {

請嘗試使用下面的代碼

<?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();
}
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM