针对MySQL的PHP​​用户名验证

时间:2014-04-11 21:57:45

标签: php mysql

花了很多时间,这就是我所在的地方:

    $uname_query = mysql_query("SELECT username FROM blog_members WHERE username='".$username."'");         

    if ($uname_query == $username) {
        $error[] = 'Username is already taken';
    }

我尝试使用SQL查询$uname_query来提取表单中输入的$username(如果存在),然后使用if语句显示错误,如果它存在

由于它现在编码,我没有错误但也没有功能。

我错过了什么?

4 个答案:

答案 0 :(得分:3)

您需要使用提取。

$row = mysql_fetch_row($uname_query);
// $row[0] will contain the first column of the first row (username)
if ($row[0] == $username) { }

但是,您应该考虑使用PDO或MySQLi,因为不推荐使用MySQL api。如果用户提供了$ username,您还应该使用预准备语句。

在PDO中你可以这样做:

$stmt = $pdo->prepare("SELECT username FROM blog_members WHERE username=?");
$stmt->execute(array($username));
// fetchColumn will return the first column of the first row (username)
if ($stmt->fetchColumn() == $username) { }

这可以通过提供没有$ username的预准备语句并将其绑定到execute()函数来防止SQL注入。 PDO最初也需要一些不同的设置,但这是一个很好的教程:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

答案 1 :(得分:1)

您必须在比较之前获取数据

$row = mysql_fetch_array( $uname_query);
if($row["username"] == $username){
  $error[] = 'Username is already taken';
}

答案 2 :(得分:0)

您需要先从查询中获取数据。

$uname_query = mysql_query("SELECT username FROM blog_members WHERE username='".$username."'");         
$arr=mysql_fetch_array($uname_query);
if ($arr["username"] == $username) {
  $error[] = 'Username is already taken';
}

答案 3 :(得分:0)

首先,你需要获取它。使用mysql_fetch_row()。其次,我不确定$error[]='string'业务是什么。你在尝试使用数组吗?

虽然我建议移至mysqli,因为mysql已被弃用。另外,我希望你能很好地消毒那个字符串。