我编写了一个代码来检查数据库中是否存在用户名。似乎返回即使存在相同的用户名也没有这样的用户名。
$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;
}
答案 0 :(得分:3)
尝试
mysql_query("SELECT username FROM member WHERE username = '$username' LIMIT 1;");
SELECT 1
实际上并没有使用数据库;它始终返回1
,因此无论member
表的内容如何,结果总是相同的。
答案 1 :(得分:0)
我认为用户名是某种varchar?如果是这种情况,您可能希望将其值放在引号中:
$result = mysql_query("SELECT `username` FROM `member` WHERE `username` = '".$username."' LIMIT 1;");
您的查询受到sql injections btw。
的约束答案 2 :(得分:0)
首先,您尝试返回可能不存在的列:“1”
其次,我希望你清理$ username,否则你允许任何人注入你的数据库。
正确的查询是
mysql_query("SELECT * FROM `member` WHERE `username`='$username'");
答案 3 :(得分:0)
SELECT 1 FROM member WHERE username = $username
时,结果将始终为1
。$username
放入查询中。像SELECT username FROM member WHERE username = '$username'
。