2010-01-20 112 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