2017-01-22 3 views
-2

Это моя база данных Database imgКак проверить, существует ли имя пользователя в строке MySQLi?

Представьте размытый текст просто «тест».

У меня есть базовая форма регистрации/регистрации, которая вставляет их данные в базу данных. Я хочу, чтобы у вас не было 2 пользователей с тем же адресом электронной почты, я пробовал следующий код, но по некоторым причинам он игнорирует это и просто позволяет мне создать учетную запись с тем же адресом электронной почты. Как мне отредактировать этот код, чтобы он отображал ошибку, если вы выбрали электронное письмо, которое кто-то еще использовал? Любая помощь приветствуется.

$exist = mysqli_query($conn, "SELECT * FROM username WHERE username='".$username."'"); 

if(mysqli_num_rows($exist) > 0){ 
    die("email already exists"); 
} 

Адрес: $conn.
$conn = new mysqli($servername, $dbusername, $dbpassword, $dbname);

Подключение к БД прекрасно работает.

+1

Вы говорите «письмо» в одной точке и проверяете «имя пользователя» в коде. Вы должны заменить 'WHERE username'' WHERE email' в запросе, если вы проверяете столбец «email» для существующей записи. – Perumal

+0

Извините, мне нужно было проверить оба, я просто перепутал свой код, меняя его на электронную почту, не помогает, thoguh. –

+0

Вы имеете в виду, что хотите проверить как «имя пользователя», так и «письмо»? Если это так, лучше использовать в запросе 'WHERE username = $ username OR email = $ email'. – Perumal

ответ

0

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

Лучший способ обеспечить это, чтобы иметь уникальное ограничение/индекс email:

alter table accounts add constraint unq_accounts_email unique (email); 

Вы, казалось бы, хотят того же для username, а также:

alter table accounts add constraint unq_accounts_username unique (username); 

Затем, когда вы пытаетесь вставить строку с дубликатом, вы получите нарушение ограничения.

Почему это лучше сделать это в базе данных? Самой важной проблемой являются условия гонки - два человека, которые пытаются зарегистрировать то же самое username или email одновременно. Выполняя проверку , а затем выполнение вставки может по-прежнему допускать дубликаты.

+0

Спасибо. У вас есть полезные ссылки, которые помогут мне в этом? –

+0

Зачем это было бы downvoted? Это правильный ответ на вопрос. –

+0

@ H.Sims. , , Хорошее место для начала - документация по уникальным ограничениям. –

-2

Прежде всего, измените свой запрос, чтобы выбрать из таблицы accounts.

Затем вы используете как процедурные, так и объектно-ориентированные формы mysqli. Вы создаете соединение с помощью объектно-ориентированного mysqli, тогда вы используете процедурные функции mysqli.

Допустим, вы только использовать объектно-ориентированный:

$conn = new mysqli($servername, $dbusername, $dbpassword, $dbname); 
$result = $conn->query("SELECT * FROM username WHERE username='".$username."'"); 
$rows = $result->num_rows; 

if($rows > 0) { 
    die('email already exists'); 
} 

для процедурных изменений вашего инициацию соединения к этому:

$conn = mysqli_connect($servername, $dbusername, $dbpassword, $dbname); 

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

+0

Не работает как? –

+0

сделать эхо числа строк, я любопытство, если сценарий дойдет до этого. Также установите отчет об ошибках для всех и покажите ошибки. Действительно, если у вас есть ошибки в скрипте. – changepicture

+0

Как мне это сделать? Я очень новичок в этом. Только началось на этой неделе –

Смежные вопросы