pdo catch并输出mysql错误

问题描述 投票:11回答:3

仍然试图让我的头围绕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错误返回给用户。

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

谢谢,瑞恩

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;
php mysql pdo try-catch
3个回答
21
投票

默认情况下,PDO不处于显示错误的状态。您需要在数据库连接中提供以下内容

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

更多信息可以看到Here


1
投票

你应该用这个:

return $exception->getMessage();

请参阅Exception类文档中的页面:

http://www.php.net/manual/en/exception.getmessage.php


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();
}
© www.soinside.com 2019 - 2024. All rights reserved.