Мой вопрос будет использовать электронную почту в качестве примера, но это может относиться ко всему.
Обычно перед регистрацией нового пользователя (включая вставку его / ее электронной почты) я проверяю, существует ли его / ее электронная почта в БД, примерно так:
$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
}
Поскольку в любом случае я бы ограничил поле 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
должно быть .Это единственные коды ошибок Я могу найти :
Первые два символа значения SQLSTATE указывают на класс ошибки:
Class = '00' указываетsuccess.
Class = '01' обозначает предупреждение.
Class = '02' обозначает «не найдено». Это относится к контексту курсоров и используется для контроля того, что происходит, когдакурсор достигает конца набора данных.Это условие также возникает для операторов SELECT ... INTO var_list, которые не получают строк.
Class> '02' указывает на исключение.