私の質問ではメールを例として使用しますが、[mysql_errno()] [mysql_errno()]を挿入する前に既存のレコードを確認する最も簡単な方法
$result = mysql_query("SELECT * FROM Users WHERE email = '".mysql_real_escape_string($email)"';");
if(!$result)
{
die(mysql_error());
}
if(mysql_num_rows($result) > 0)
{
die('<p>Email already in DB. <a....>Recover Email</a></p>');
}
else
{
//insert new user data into Users table
}
私は「ので:
通常は新規ユーザーを登録する前に、彼/彼女のメールはすでにこのようなDB何かに存在する場合、私がチェック(彼/彼女のメールを挿入含みます) dは、私のUsersテーブルのemail
フィールドをUNIQUE
に制限しています。最初に挿入しようとするのが速くなく、失敗した場合はエラーをチェックしますか?このような何か:
$result = mysql_query(...);//insert new user data into Users table
if(!$result)
{
if(mysql_errno()==$insert_unique_error)
{
$error = '<p>Email already in DB. <a....>Recover Email</a></p>';
}
else
{
$error = mysql_error();
}
die($die_str);
}
問題がどうあるべきか$insert_unique_error
私はを知らないということです。これらは、エラーコードI could find次のとおりです。
The first two characters of an SQLSTATE value indicate the error class:
Class = '00' indicates success.
Class = '01' indicates a warning.
Class = '02' indicates “not found.” This is relevant within the context of cursors and is used to control what happens when a cursor reaches the end of a data set. This condition also occurs for SELECT ... INTO var_list statements that retrieve no rows.
Class > '02' indicates an exception.
を設定し、なぜそれ? –
@DamienPirsy通常の方法では、電子メールがまだ存在しないとき(select + insert)とそれが実行されたとき(select)の2つのクエリを行います。私が提案した解決策は、電子メールが存在するかどうかにかかわらず、1つのクエリを実行するだけです(挿入する)。 –
私はそれがだと思っています: エラー:1092 SQLSTATE:HY000(ER_INSERT_INFO) メッセージ:レコード:%ld個の重複:%ldの警告:%ldの あなたのメールフィールドは一意である必要があります。 – CSharpRU