5

1062 エラー コード (重複キー エントリ) が発生した列名をエレガントにキャッチするにはどうすればよいですか?

私がする時:

$db = @new mysqli('localhost', 'root', '******', 'database');

$pstmt = $db->prepare("INSERT INTO users (person_id, user_name, password, e_mail) VALUES (LAST_INSERT_ID(), ?, ?, ?)");
$pstmt->bind_param("sss", $_POST["register_user_name"], md5($_POST["register_password"]), $_POST["register_e_mail"]);
// error occurred
if (!$pstmt->execute()) {
    if ($db->errno == 1062) {
      $column_duplicate_key_entry = /*how to obtain the column name(s)?*/;
    }
}

一意の列はuser_nameおよびe_mail

$db->error自分でフィールドを呼び出して解析することで、エラー文字列を取得できることはわかっています。しかし、それは私の意見ではエレガントではありません。他に良い解決策はありますか?

私がやりたいことは、新しいユーザーを挿入しようとすることです。挿入されたユーザー名が既に存在する場合は 1062 エラーがスローされるため、電子メール アドレスが既に存在する場合です。ユーザー名のみが取得されているのか、電子メール アドレスのみが取得されているのか、またはその両方が取得されているのかを確認したいと考えています。繰り返しになりますが、最初に電子メールとユーザー名を選択して、それらが既に存在するかどうかを確認することなく、エレガントな方法で実行したいと考えています。可能であれば、1 つの挿入クエリを実行して、そこからすべての情報を取得したいと考えています。

4

1 に答える 1

4

MySQLは、数値、状態、およびメッセージの形式でエラーを返します。メッセージを解析しないと、重複している列を特定できません。

さらに、MySQLは最初の失敗で爆撃します。したがって、重複がある場合はuser_namee_mail最初に検出された重複のみがメッセージに返されます。

于 2013-01-30T19:27:27.323 に答える