簡體   English   中英

PHP PDO嘗試捕獲未捕獲

[英]PHP PDO Try Catch not Catching

我有這段代碼:

try {
    $dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_database, $db_user, $db_pass);
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $dbh->prepare('DELECT userID FROM tblusers');
} catch (PDOException $e) {
    echo "Error!: " . $e->getMessage() . "<br/>";
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}

當我在IDE中使用調試器逐步瀏覽代碼時,即使我的prepare語句出錯,它也永遠不會進入catch塊。

我究竟做錯了什么?

我是PDO的新手,可以嘗試/捕獲塊,所以如果這是一個愚蠢的問題,請在這里接受!

嘗試添加$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

模擬的准備好的語句不會與數據庫服務器通信,因此PDO :: prepare()不會檢查該語句。

參考: http : //php.net/manual/zh/pdo.prepare.php

PDO_mysql默認使用模擬的預處理語句(出於性能原因),因此prepare將不會引發異常。 PDOStatement::execute不過。

您可以像jonnyynnoj提到的那樣關閉仿真,但是我發現捕獲執行異常通常就足夠了。

try / catch將僅捕獲異常。 其他錯誤(解析錯誤,運行時錯誤等)將不會執行catch塊。

在您的情況下,只會捕獲“ PDOException”類型的異常,其他所有內容都可能會顯示或記錄(取決於php.ini中的錯誤報告指令)。

顯示為錯誤的內容是什么?

暫無
暫無

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

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