Как проверить наличие дублирующих записей в БД? - PullRequest
2 голосов
/ 07 декабря 2010

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

Плагин поставляется со скриптом с именем 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;
?>

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

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

Ответы [ 5 ]

2 голосов
/ 07 декабря 2010

Не используйте некорректный подход «ВЫБЕРИТЕ перед ВСТАВКОЙ».Всегда будет условие гонки между вашим «SELECT» и последующим «INSERT», если вы не участвуете в глобальной транзакции, что, я сомневаюсь, здесь имеет место.

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

2 голосов
/ 07 декабря 2010

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

1 голос
/ 07 декабря 2010

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

SELECT COUNT(*) as 'count' FROM `data` WHERE email = 'requested@email.com';
0 голосов
/ 07 декабря 2010

Возможно, вы можете сделать 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 .....
0 голосов
/ 07 декабря 2010

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

$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

edit означает «echo», а не «return»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...