0

PDOの準備と実行を使用してクエリを実行しているときに発生したエラーの種類を追跡したいと思います。

たとえば、Eメール、名前、DOBを挿入する必要があり、Eメールが一意である必要がある場合、Eメールがすでに受信されているかどうかを確認する特別なクエリを作成する代わりに、発生したエラーを追跡して同じことを知りたいと思います。

4

2 に答える 2

1

挿入クエリの周りに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を構成する必要があります。

于 2012-09-26T08:54:30.310 に答える
1

まず最初に、データベースを構成して、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";
    }
}
于 2012-09-26T08:55:23.007 に答える