2016-10-27 10 views
4

エラーコードを変更したいSQLSTATE [23000]:整合性制約違反:1062「電子メール」メッセージを重大な「[email protected]」に「error emailすでに使用中」デフォルトのエラーメッセージコードを変更するには

create.php

<?php 
require_once 'dbconfig.php'; 

if ($_POST) { 

    $fname = $_POST['fname']; 
    $lname = $_POST['lname']; 
    $contactnum = $_POST['contactnum']; 
    $email = $_POST['email']; 
    $pass = $_POST['pass']; 
    $lang = $_POST['lang']; 

    try { 

     $stmt = $db_con->prepare("INSERT INTO tbluser(fname,lname,contactnum,email,pass,lang) VALUES(:ufname,:ulname,:ucontact,:uemail,:upass,:ulang)"); 
     $stmt->bindParam(":ufname", $fname); 
     $stmt->bindParam(":ulname", $lname); 
     $stmt->bindParam(":ucontact", $contactnum); 
     $stmt->bindParam(":uemail", $email); 
     $stmt->bindParam(":upass", $pass); 
     $stmt->bindParam(":ulang", $lang); 

     if ($stmt->execute()) { 
      echo "Successfully Added"; 
     } else { 
      echo "Query Problem"; 
     } 

    } catch(PDOException $e) { 
     echo $e->getMessage(); 
    } 
} 
?> 

私はこの

if (mysql_errno() == 1062) { 

    echo"error email already in use!"; 
} 

のような何かを追加しようとしたが、それを動作させることはできません。あなたの助けをありがとう、私はまだPHPの新しいです。 PDOの使い方を教えてもらえますか?

<style type="text/css"> 
    #dis{ 
     display:none; 
    } 
</style> 

<div id="dis"> 
    <!-- here message will be displayed --> 
</div> 

<form method='post' id='emp-SaveForm' action="#"> 

    <table class='table table-bordered'> 

     <tr> 
      <td>First Name</td> 
      <td><input type='text' name='fname' class='form-control' required /></td> 
     </tr> 

     <tr> 
      <td>Last Name</td> 
      <td><input type='text' name='lname' class='form-control' required></td> 
     </tr> 

     <tr> 
      <td>Contact Number</td> 
      <td><input type='number' name='contactnum' class='form-control' required></td> 
     </tr> 

     <tr> 
      <td>Email</td> 
      <td><input type='email' name='email' class='form-control' required /></td> 
     </tr> 

     <tr> 
      <td>Password</td> 
      <td><input type="password" name='pass' class='form-control' required /></td> 
     </tr> 

     <tr> 
      <td>Language</td> 
      <td><input type='text' name='lang' class='form-control' required /></td> 
     </tr> 
     <tr> 
      <td colspan="2"> 
      <button type="submit" class="btn btn-primary" name="btn-save" id="btn-save"> 
      <span class="glyphicon glyphicon-plus"></span> Save this User 
      </button> 
      </td> 
     </tr> 

    </table> 
</form> 
+0

電子メールが存在するかどうかを確認するには** SELECT **を使用し、電子メールが存在しない場合は** INSERT **のみを使用する必要があります。 – user2182349

+0

なぜそれの代わりにストアドプロシージャを作成しないでください。 – Beginner

答えて

2

mysql_errno

addform.phpは廃止MySQLの拡張の一部である - あなたはPDOを使用している、あなたもそれを使用してエラーをチェックする必要があるので:

if ($stmt->execute()) { 
    echo "Successfully Added"; 
} else { 
    if ($stmt->errorCode() == 1062) { 
     # Here^
     echo "error email already in use!"; 
    } else { 
     echo "some other problem..."; 
    } 
} 
1

エラーが表示することができますイベント/エラーログに記録され、正当なエラーを見つけようとしている場合は不要なノイズが発生する可能性があるので、頼りすぎることはありません。代わりに試してください:

IF (SELECT 1 = 1 FROM users WHERE email=?) THEN 
BEGIN 
    SELECT 0 AS Result--signals already exists to the application 
END; 
ELSE 
BEGIN 
    INSERT INTO users(columns) VALUES(values); 
    SELECT LAST_INSERT_ID() AS Result; 
END; 
END IF; 

またはこれらの行に沿って何かを試してください。

+0

2人のユーザーが同じメールで同時にサインアップするとどうなりますか?挿入からのエラーを処理する必要があるため、並行性とは、selectを信頼して制約違反を防ぐことができないことを意味します。 – casey

+0

@caseyああ、確かにテーブルの制約を保つ。問題はプロセスに依存しており、ログに不必要なエラーがたくさんあります。エラーが発生した場合は、それを通常のフローの一部ではなくエラーとして扱います – LordBaconPants

関連する問題