2013-09-14 13 views
0

Я написал код, чтобы проверить, существует ли имя пользователя в базе данных или нет. Кажется, что возвращается такое имя пользователя, даже если существует одно и то же имя пользователя.Проверка наличия или отсутствия имени пользователя в sql и php

$conu=mysqli_connect("localhost","db_user","db_pass","db_name"); 
$result = mysql_query("SELECT 1 FROM member WHERE username = $username"); 
if ($result && mysql_num_rows($result) > 0) { 
$user_err = "<i><span class='error'>Usernme already exists</span></i>"; 
    $errflag = true; 
} 
elseif(preg_match("/^[0-9a-zA-Z_]{5,}$/", $username) === 0) { 
    $user_err = "<i><span class='error'>Usernme must be bigger than 5 chararacters and can contain only digits, letters and underscore</span></i>"; 
    $errflag = true; 
} 
+2

Вы, вероятно, ** широко открыты ** для SQL-инъекций, и вы ** будете взломаны **, если вы еще не были. Используйте подготовленные/параметризованные запросы с PDO или аналогичные, чтобы полностью избежать этой проблемы. – Brad

ответ

3

Попробуйте

mysql_query("SELECT username FROM member WHERE username = '$username' LIMIT 1;"); 

SELECT 1 фактически не используя базу данных; он всегда возвращает 1, поэтому ваш результат всегда один и тот же, независимо от содержимого таблицы member.

+0

спасибо, что он отлично работает сейчас. –

+0

Не беспокойтесь. Пожалуйста, отметьте этот ответ как принятый, если он был наиболее полезным. –

0

Имена пользователей Я воспринимаю это своего рода varchar? Если это так, вы можете поставить его значение в кавычках:

$result = mysql_query("SELECT `username` FROM `member` WHERE `username` = '".$username."' LIMIT 1;"); 

ваш запрос подлежит SQL инъекции КСТАТИ.

0

Сначала вы пытаетесь вернуть столбец, который, вероятно, не существует: «1»
Во-вторых, я надеюсь, что вы очищаете имя пользователя $, иначе вы разрешаете кому-либо вводить вашу базу данных.

Правильный запрос

mysql_query("SELECT * FROM `member` WHERE `username`='$username'"); 
0
  1. Вы используете MySQLi для подключения, но MySQL для выполнения запроса.
  2. Когда вы SELECT 1 FROM member WHERE username = $username, результатом будет всегда 1.
  3. В запросе вам нужно поставить $username в кавычки. Что-то вроде SELECT username FROM member WHERE username = '$username'.
  4. Вы забыли указать часть кода, если в вашей публикации нет такого имени пользователя.
Смежные вопросы