检查用户名是否存在 sql 和 php 中的代码


Checking whether username exists or not code in sql and 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;
}

尝试

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

SELECT 1实际上并没有使用数据库;它总是返回1,因此无论member表的内容如何,您的结果总是相同的。

用户名 我把它当作某种瓦尔查尔? 如果是这种情况,您可能希望将其值放在引号中:

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

顺便说一句,您的查询受 SQL 注入的影响。

首先,您尝试返回可能不存在的列:"1"
其次,我希望您正在清理$username否则您允许任何人注入您的数据库。

正确的查询是

mysql_query("SELECT * FROM `member` WHERE `username`='$username'");
  1. 您正在使用 mysqli 进行连接,但使用 mysql 来执行查询。
  2. 当您SELECT 1 FROM member WHERE username = $username时,结果将始终是1
  3. 您需要将$username放在引号中的查询中。像SELECT username FROM member WHERE username = '$username'.
  4. 您忘记在发布中没有此类用户名时包含代码部分。