PDOの準備と実行を使用してクエリを実行しているときに発生したエラーの種類を追跡したいと思います。
たとえば、Eメール、名前、DOBを挿入する必要があり、Eメールが一意である必要がある場合、Eメールがすでに受信されているかどうかを確認する特別なクエリを作成する代わりに、発生したエラーを追跡して同じことを知りたいと思います。
挿入クエリの周りにtry/catchブロックを使用して、例外ハンドラーで二重の電子メールを処理できます。
$sql = "INSERT INTO `mystuff` (email, name ) VALUES (:email, :name)";
try {
$sth = $dbh->prepare($sql);
$sth->execute(array(':email' => $email, ':name' => $name));
}
catch (Exception $e) {
echo 'email already taken';
}
もちろん、エラー時に例外をスローするようにPDOを構成する必要があります。
まず最初に、データベースを構成して、UNIQUE KEY
ALTER TABLE yourtable ADD CONSTRAINT uniqukey_for_mail UNIQUE(email);
次に、ERRMODE_EXCEPTIONでPDOを使用します
$bddConnect = new PDO('dsn',$user,$password);
$bddConnect->setAttribute(PDO::ATTR_ERRMOD,PDO::ERRMOD_EXCEPTION);
次に、データを更新または挿入するときに、クエリをtry / catchでラップし、エラーが制約違反であることを確認する必要があります。
try{
$bddConnect->exec("UPDATE yourtable SET email='already in table EMAIL' WHERE
id='other id than the one that has the email'");
}catch(PDOException $e){
if(strpos('constraint violation',$e->getMessage())!==false){
echo "already taken";
}
}