предотвращение вставки дублирующейся строки в php/mysql

как Вы предотвращаете запись дублирующихся записей в php mysql? проверка входа перед вставкой к таблице.

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

Править
Это - то, что я имею далеко для вставки строк..., как был бы я реализовывать оба этих ответа здесь:

  <?php
        if (array_key_exists('confirm',$_POST)) {

                $Cuser = $_POST['Cuser']; 
                $Cemail = $_POST['Cemail']; 
                $Cpassword = $_POST['Cpassword'];
                $md5password = md5($_POST['Cpassword']);

                mysql_query("INSERT INTO tbl_users (`username`,`email`,`password`)
VALUES ('$Cuser', '$Cemail', '$md5password')"); 

                echo "Thank you. The user <b>".$Cuser."&nbsp;(".$Cemail.")</b> has been successfully added to the database.<p>

                <a href='myaccount.php' class='form'>Return</a>";       

                exit;
        }
        ?>

Я предполагаю, что еще мог реализовать все это в если... оператор?

7
задан bummi 20 December 2014 в 00:39
поделиться

3 ответа

я использовал оператор sql вместе с оператором if else.

mysql_select_db($database_speedycms, $speedycms);
$query_usercheck = "SELECT * FROM tbl_users WHERE username='$user' OR email='$email'";
$usercheck = mysql_query($query_usercheck, $speedycms) or die(mysql_error());
$row_usercheck = mysql_fetch_assoc($usercheck);
$totalRows_usercheck = mysql_num_rows($usercheck);

тогда

if ( $totalRows_usercheck > 0 )

выведите сообщение об ошибке, чтобы предотвратить добавление дубликатов

иначе разрешите вставку базы данных

2
ответ дан 6 December 2019 в 08:14
поделиться

Перед вставкой запустите оператор SQL, например

SELECT * FROM users WHERE users.name = :name OR users.email = :email

(используя параметризованный SQL ), и подсчитайте количество возвращенных строк.

Если их больше 0, есть дубликат.

OMG Ponies предложила ограничения для этих двух полей, что также является очень хорошей идеей для предотвращения ошибки в базе данных. Однако, если вы вставите дубликат, все, что вам даст это ограничение, - это сообщение об ошибке базы данных, которое вы можете или не захотите попытаться проанализировать.

3
ответ дан 6 December 2019 в 08:14
поделиться

Определите уникальные ограничения для столбцов username и email:

ALTER TABLE your_table ADD CONSTRAINT uk_username UNIQUE (username)
ALTER TABLE your_table ADD CONSTRAINT uk_email UNIQUE (email)

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

17
ответ дан 6 December 2019 в 08:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: