我写了一个代码来检查数据库中是否存在用户名。它似乎返回即使存在相同的用户名,也不存在这样的用户名。
$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'");
- 您正在使用 mysqli 进行连接,但使用 mysql 来执行查询。
- 当您
SELECT 1 FROM member WHERE username = $username
时,结果将始终是1
。 - 您需要将
$username
放在引号中的查询中。像SELECT username FROM member WHERE username = '$username'
. - 您忘记在发布中没有此类用户名时包含代码部分。