MySQL/PHP数据库值检查不允许额外的字符


MySQL/PHP database value check not allowing for extra characters

我在PHP中有一个用户名检查,当'username'已经存在时,每当有人输入值'username2'时,它返回它已经被占用了。

    include 'connect.php';
$username = $_POST['r_username'];
$password = $_POST['r_password'];
$email = $_POST['r_email'];
$qry = "SELECT * FROM users WHERE 'username' = '$username'";
if(mysql_query($qry) != ''){
    echo "<script type='text/javascript'>
    alert('This username has already been taken!');
    window.location = 'register.php';
    </script>";
}else{...

谢谢你的帮助!

$qry = "SELECT * FROM users WHERE 'username' = '$username'";

我不太了解php或MySql,但只是想问field_name是否应该是'username'或没有引号。可能是它把它作为值而不是column_name。我不确定

您使用mysql_query()不正确。它返回一个在其他函数中使用的资源。

阅读手册:http://php.net/manual/en/function.mysql-query.php

$query_response = mysql_query($qry)
if (mysql_num_rows($query_response) > 0) {
echo "<script type='text/javascript'>
    alert('This username has already been taken!');
    window.location = 'register.php';
    </script>";
}
else {
echo 'This username has not been taken yet. Please, proceed';
}

看一下mysql_query返回什么。您的条件(mysql_query($qry) != '')将始终是true

另外,在查询中使用反号而不是撇号(')来括起列名。现在你比较的$username字符串是字符串username,而不是username列。

顺便说一句,我同意其他人的看法。您的查询不受SQL注入的保护。使用mysql_real_escape_string如下:
"SELECT * FROM users WHERE `username` = '".mysql_real_escape_string($username)."'";