Как проверить дублируемую запись в БД?

Я создал форму на сайте, которая захватывает несколько полей, включая «электронную почту», и отправляет ее в базу данных, имеющуюся у меня с таблицей с именем «данные». Я использую плагин jQuery Validate, чтобы убедиться, что все поля завершены, хотя я не могу дублировать адреса электронной почты в db.

Плагин поставляется со сценарием с именем emails.php, который он вызывает при проверке данных поля, и вот код:

<?php $request = trim(strtolower($_REQUEST['email'])); $emails = array('steam@valve.com', 'bill@gates.com', 'blocked@email.com'); $valid = 'true'; foreach($emails as $email) { if( strtolower($email) == $request ) $valid = '"Thats already taken."'; } echo $valid; ?> 

Этот фрагмент проверяет только те электронные письма, которые перечислены. Есть ли способ запросить БД для поиска по «данным» таблицы и проверить «электронные письма», чтобы увидеть, есть ли дубликат и, надеюсь, отправить сообщение об ошибке, если это так?

Кроме того, сценарий, похоже, работает, когда я использую любой из примеров писем, поэтому он по существу «работает» мне просто нужно настроить его, чтобы проверить БД.

Поместите ограничение уникальности в столбец электронной почты.

Не используйте ошибочный подход «SELECT before INSERT». Между вашим «SELECT» и последующим «INSERT» всегда будет условие гонки, если вы не находитесь в глобальной транзакции, и я сомневаюсь, что это так.

Вы должны поместить ограничение UNIQUE в столбец электронной почты, а затем просто попытаться ЗАПИСАТЬ новую запись и поймать ошибку SQL уникальности. Вы можете поймать ошибку, проверив код ошибки, для MySQL, например, это 1062 или 23000 в зависимости от драйвера.

Во-первых, поставьте ограничение UNIQUE на столбец электронной почты. Затем, при регистрации, запустите следующий запрос:

 SELECT COUNT(*) as 'count' FROM `data` WHERE email = 'requested@email.com'; 

Вам просто нужно написать запрос, чтобы проверить, находится ли электронное письмо в таблице:

 $query = SELECT count(*) AS `total` FROM `data` WHERE `email` = '{$request}' $row = mysql_fetch_assoc(mysql_query($query)); if($row['total']) echo false; //exists else echo true; //doesn't exist 

означает «эхо», а не «возвращение»

Возможно, вы можете сделать php-код, который проверяет БД на существующие значения, используя команду mysql_num_rows.

Что-то вроде этого:

 $result = mysql_query("SELECT email from accounts where email = $email_to_check"); $found = mysql_num_rows($result); if ($found > 0) { echo "Email already exists"; } else .....