Самый быстрый способ проверить наличие существующей записи перед вставкой [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
}
Так как я бы ограничил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 указывают на класс ошибки:
Класс = '00' указывает на успех.
Класс = '01' указывает на предупреждение.
Class = '02' означает «не найден». Это относится к контексту курсоров и используется для управления тем, что происходит, когда курсор достигает конца набора данных. Это условие также возникает для операторов SELECT ... INTO var_list, которые не получают строк.
Класс> '02' указывает на исключение.