2010-01-20 109 views
17

我想對PHP PDO類的工作,但我有一些麻煩,找到處理錯誤的正確方法,我已經寫了這個代碼:如何處理PDO異常

<?php 
// $connection alreay created on a class which works with similar UPDATE statements 
// I've simply added here trim() and PDO::PARAM... data type 


$id = 33; 
$name = "Mario Bros."; 
$url = "http://nintendo.com"; 
$country = "jp"; 


try { 

$sql = "UPDATE table_users SET name = :name, url = :url, country = :country WHERE user_id = :user_id"; 

$statement = $connection->prepare ($sql); 

$statement->bindParam (':user_id', trim($id), PDO::PARAM_INT); 
$statement->bindParam (':name', trim($name), PDO::PARAM_STR); 
$statement->bindParam (':url', trim($url), PDO::PARAM_STR); 
$statement->bindParam (':country', trim($country), PDO::PARAM_STR, 2); 

$status = $statement->execute(); 

} catch (PDOException $e) { 
    print $e->getMessage(); 
} 

print $status; // it returns a null value, and no errors are reported 

?> 

的這部分代碼不報告錯誤,但它根本不起作用,在底部var $status,返回一個空值。

有人能幫我找到我錯在哪裏嗎?

回答

41

除非您告訴它,否則PDO不會拋出異常。您是否運行過:

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

關於PDO對象?

+1

簡單,快捷!謝謝 – vitto 2010-01-20 20:03:43

+0

@Matchu:這是默認行爲?從何時起?! – 2010-01-20 20:09:17

+0

自從我上個月前建立了一個數據庫類以來。至少在我的環境中,默認模式是默認模式。 – Matchu 2010-01-20 20:13:44

1

您可以在連接mysql時添加一個屬性。

function connect($dsn, $user, $password){ 
    try { 
     $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); 
    } catch (PDOException $e) { 
     echo 'Connection failed: ' . $e->getMessage(); 
     exit; 
    } 
    } 

感謝

+0

不錯!那麼PDO :: ERRMODE_EXCEPTION呢? – 2016-02-02 14:43:30

+0

相同的方式PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION – TomerM 2016-02-02 15:00:33

+0

[不要捕捉異常報告](http://phpdelusions.net/pdo#errors)。 PHP會做得更好。 – 2016-02-02 15:33:13