16

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; 
} 

クエリが失敗した場合、またはID番号が重複している場合は、これをユーザーに表示します。

変数$exceptionをエコーし​​ようとすると、機能しません。

MySQLエラーをユーザーに返したい。

4

3 に答える 3

27

デフォルトでは、PDOはエラーを表示する状態ではありません。DB接続で以下を提供する必要があります

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

詳細はこちらをご覧ください

于 2012-10-19T18:20:13.597 に答える
4

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();
}
于 2019-03-06T07:55:43.693 に答える
1

これを使用する必要があります:

return $exception->getMessage();

例外クラスのドキュメントのページを参照してください。

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

于 2012-10-19T14:49:04.163 に答える