仍然试图绕过pdo。
我有一个用pdo执行的insert语句。插入效果很好,但如果有错误,我希望它显示给用户。
我有下面的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,我希望将其显示给用户。
如果我只是尝试回显变量$ exception,它就不起作用。
我想将mysql错误返回给用户。
任何建议一如既往地受到赞赏。
谢谢, 莱恩
更新
根据建议的答案新代码:
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;
答案 0 :(得分:20)
默认情况下,PDO不处于显示错误的状态。您需要在数据库连接中提供以下内容
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
可以看到更多信息Here
答案 1 :(得分:1)
你应该用这个:
return $exception->getMessage();
请参阅Exception类文档中的页面:
答案 2 :(得分:0)
1。在数据库连接后添加ERRMODE_EXCEPTION模式:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
2。而且,必须对所有的mysql查询使用try {} catch {}方法。像这样:
try {
$SQL = "DELETE FROM items WHERE item_id=:item_id";
$m = $dbh->prepare($SQL);
$m->bindParam(':item_id', $item_id, PDO::PARAM_INT);
$m->execute();
//success
$return = "Your success message.";
}
catch (PDOException $e) {
//error
$return = "Your fail message: " . $e->getMessage();
}