2013-03-19 73 views
-1

我對PDO相當陌生。我有一個嘗試和捕獲什麼東西不存在,即表中捕獲和顯示錯誤。PDO更新錯誤未顯示

但是,如何顯示錯誤消息/導致sql失敗的命令。

例如下面我試圖插入單詞「啓用」到一個小的int列 - 但是,只顯示我一個空白屏幕 - 必須調試自己。我如何顯示SQL失敗的錯誤消息?

$db = new PDO('mysql:host='.$dateBaseHost.';dbname='.$dateBaseName, $dateBaseUsername, $dateBasePassword); 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

// set/get variables 
$id = (isset($_GET['id']) === true) ? $_GET['id'] : die("ID not set") ; // ? : shorthand if else 
$action = (isset($_GET['action']) === true) ? $_GET['action'] : die("Action not set") ; // ? : shorthand if else 


// query 
$query = $db->prepare(" UPDATE `telephoneCountries` SET `enabled`= :action WHERE `id` = :id "); 


// bind parameters - avoids SQL injection 
$query->bindValue(':id', $id); 
$query->bindValue(':action', $action); 

// try... if not catch exception 
try { 
    // run the query 
    $query->execute(); 
} 
catch (PDOException $e){ 
    //sendErrorMail($e->getMessage(), $e->getFile(), $e->getLine()); 
    echo $e->getMessage(); 
    echo $e->getFile(); 
    echo $e->getLine(); 
} 

回答

6

我試圖插入 「已啓用」 字成微小的INT列

它是相當確定的MySQL。 0將被插入。

如何顯示錯誤消息/導致sql失敗的命令。

爲真正的錯誤,你必須只安裝PHP,以顯示他們

ini_set('display_errors',1); 

所以 - 你就可以看到每一個未捕獲的異常。另外,如果你只是要顯示一個錯誤信息,而不是處理錯誤本身,那麼根本就不要使用try..catch。 PHP將完成所有的工作。這纔是重點。

大多數人會將錯誤報告與錯誤處理混淆。後者不應該用於前者。當錯誤處理消息,你唯一的目標就是讓PHP提高他們,並建立正確的目的地:

  • 開發服務器上的錯誤消息必須顯示在屏幕上
  • 在現場服務器上它不應該顯示,但記錄而不是。

沒有所有這些的try-catch塊,你就可以通過一對夫婦INI設置或單個錯誤處理功能的裝置(這是我在其他的答案中提到你來控制的錯誤信息(包括非例外) )。

只有在您要處理錯誤本身時才使用try..catch - 例如,連接到另一臺服務器。

因此,要更加冗長回答你的問題:

  1. 集PDO異常模式。完成了。
  2. 刪除所有隻處理錯誤消息的try..catch塊。
  3. 設置PHP以使用上面的ini指令在開發服務器上顯示錯誤。
  4. 在實時服務器上,強烈建議您記錄錯誤而不是發送電子郵件。但如果你仍然想這樣 - 使用自定義異常處理函數發送電子郵件,而不是數百試試..catch blocks
-1

取而代之的是捕獲錯誤,您可以使用$query->rowCount();來檢測成功的更新。這意味着更新成功。