it-roy-ru.com

Попытка проверить, существует ли имя пользователя в базе данных MySQL, используя PHP

Я просмотрел множество других постов, похожих на мою проблему, и реализовал их решения (насколько я могу судить) настолько точно, насколько мог. Однако каждый раз, когда я выполняю этот сценарий, выполняется код в блоке else (даже если введенное имя пользователя уже присутствует).

Имя таблицы - «Пользователи», а столбец, который я пытаюсь найти, - «имя пользователя»…. Входные данные из моей формы были прочитаны в $username, и я проверил, что она была правильно прочитана с использованием echo . $con содержит соединение с сервером.

В какой-то момент я также вставил echo $query (ничего не печаталось) и echo mysql_num_rows($query) (ничего не печаталось).

Вот соответствующий сегмент кода. Буду очень признателен за некоторые советы.

$query = mysql_query("SELECT username FROM Users WHERE username=$username", $con);

  if (mysql_num_rows($query) != 0)
  {
      echo "Username already exists";
  }

  else
  {
    ...
  }

Правка: Очевидно, я должен был использовать mysqli для моего сервера, и способ, которым я проверил num_rows для этого, было сделать $ query-> num_rows, так как это было свойством объекта. Спасибо за помощь!

9
covfefe

измените свой запрос на лайк.

$username = mysql_real_escape_string($username); // escape string before passing it to query.
$query = mysql_query("SELECT username FROM Users WHERE username='".$username."'");

Тем не менее, MySQL устарела. Вместо этого вы должны использовать MySQLi или PDO

10
Renish Khunt

Попробуй это:

$query = mysql_query("SELECT username FROM Users WHERE username='$username' ")

Не добавляйте $con в функцию mysql_query().

Отказ от ответственности: использование переменной username в строке, переданной mysql_query, как показано выше, является тривиальным вектором атаки SQL-инъекций, поскольку username зависит от параметров веб-запроса (строка запроса, заголовки, тело запроса и т.д.) Или иным образом. параметры, которые злоумышленник может контролировать.

3
Oki Erie Rinaldi

$ query = mysql_query ("ВЫБЕРИТЕ имя пользователя из пользователей, ГДЕ имя пользователя = '$ имя пользователя'")

Используйте подготовленные операторы , не используйте mysql, поскольку он устарел.

// check if name is taken already
$stmt = $link->prepare("SELECT username FROM users WHERE username = :username");
$stmt->execute([
    'username' => $username
]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if (isset($user) && !empty($user)){
    // Username already taken
}
1
Jack Nicholson