2012-09-18 62 views
0

我的代碼塊:PHP PDO嘗試捕捉不要再追

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中執行代碼,它從未進入catch塊,即使我有一個錯誤我的prepare聲明。

我在做什麼錯?

我是新來的PDO和try/catch塊,所以如果這是一個愚蠢的問題,請在這裏忍受!

回答

2

PDO_mysql默認使用模擬預準備語句(性能原因),所以準備不會拋出異常。 PDOStatement::execute將盡管。

你可以通過jonnyynnoj提到的方式關閉emmulation,但是我發現捕獲執行異常通常足夠好。

+0

太棒了。謝謝你的幫助 – FastTrack

2

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

模擬預處理語句不與數據庫服務器進行通信,從而PDO ::準備()不檢查語句。

編號:http://php.net/manual/en/pdo.prepare.php

+0

感謝您的回答! – FastTrack

0

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

在你的情況下,只有「PDOException」類型的異常被捕獲,其他所有可能被顯示或記錄(取決於你在php.ini中的錯誤報告指令)。

什麼顯示爲錯誤?