2012-10-19 40 views
8

仍试图让我的头绕过pdo。pdo捕获并输出mysql错误

我有一个与pdo一起执行的插入语句。插入工程很好,但如果有一个错误,我希望它显示给用户。

我有下面的try catch块。

try{ 
     $insertuser = $db->prepare('INSERT INTO `she_she`.`Persons` (`idnumber`,`addedby`,`firstname`, `middlename`, `surname`, `fullname`, `gender`, `birthdate`, `homelanguage`, `department`, `employeetype`, `employeestatus`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)'); 
     $insertuser->execute(array($idnumber,$user,$firstname, $middlename, $surname, $fullname, $gender, $birthdate, $language, $department, $employmenttype, $personstatus)); 
    } 
    catch(PDOException $exception){ 
     return $exception; 
    } 

如果查询失败,或者可以说重复的IDNumber,我希望这显示给用户。

如果我只是尝试回显变量$异常,它不起作用。

我想将mysql错误返回给用户。

任何建议一如既往的赞赏。

感谢, 瑞安

UPDATE

新的代码按建议的答案:

try{ 
     $insertuser = $db->prepare('INSERT INTO `she_she`.`Persons` (`idnumber`,`addedby`,`firstname`, `middlename`, `surname`, `fullname`, `gender`, `birthdate`, `homelanguage`, `department`, `employeetype`, `employeestatus`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)'); 
     $insertuser->execute(array($idnumber,$user,$firstname, $middlename, $surname, $fullname, $gender, $birthdate, $language, $department, $employmenttype, $personstatus)); 
    } 
    catch(PDOException $exception){ 
     return $exception->getMessage(); 
    } 
echo "exception: ".$exception; 
+1

$例外是类型PDOException的对象,它的两个多属性下面将是MySQL错误代码和错误信息。 –

回答

16

默认情况下,PDO是不是会显示错误的状态。您需要提供您的数据库连接

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

更多信息可以看出Here

+0

谢谢。如果我将错误模式设置为'ERRMODE_WARNING',它将在页面顶部返回警告,我怎样才能将它设置为变量的值并将其返回到我想要在页面上的位置。谢谢 – Smudger

+2

在您的catch块中,您可以将$ exception设置为一个不同的变量以备后用。 (catch)(PDOException $ exception){ $ error = $ exception-> getMessage(); } //以后代码 回声“发生错误”。 $ error;' 或类似的东西。 –