0

我编写了一个代码来检查用户名是否存在于数据库中。即使存在相同的用户名,它似乎也返回不存在这样的用户名。

$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;
}
4

4 回答 4

3

尝试

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

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

于 2013-09-14T16:22:03.623 回答
0

我认为的用户名是某种 varchar?如果是这种情况,您可能希望将其值放在引号中:

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

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

于 2013-09-14T16:23:42.917 回答
0

首先,您试图返回一个可能不存在的列:“1”
其次,我希望您正在清理 $username 或者您允许任何人注入您的数据库。

正确的查询是

mysql_query("SELECT * FROM `member` WHERE `username`='$username'");
于 2013-09-14T16:23:49.230 回答
0
  1. 您正在使用 mysqli 进行连接,但使用 mysql 来执行您的查询。
  2. 当你SELECT 1 FROM member WHERE username = $username,结果将永远是1
  3. 您需要将$username查询放在引号中。类似的东西SELECT username FROM member WHERE username = '$username'
  4. 当您的帖子中没有这样的用户名时,您忘记包含代码的一部分。
于 2013-09-14T16:29:12.863 回答