尝试使用PHP检查MySQL数据库中是否已存在用户名

cov*_*efe 9 php mysql sql

我已经查看过与我的问题类似的许多其他帖子,并尽可能地实现了他们的解决方案(据我所知).但是,每次执行此脚本时,都会执行else块中的代码(即使输入的用户名是已存在的用户名).

表名是"用户",我要搜索的列是"用户名".我的表格中的输入被读入$username,我验证它是使用echo正确读取的.$con包含与服务器的连接.

在某些时候,我也放入echo $query(没有打印)和echo mysql_num_rows($query)(没有打印).

这是代码的相关部分.真的很感激一些提示.

$query = mysql_query("SELECT username FROM Users WHERE username=$username", $con);

  if (mysql_num_rows($query) != 0)
  {
      echo "Username already exists";
  }

  else
  {
    ...
  }
Run Code Online (Sandbox Code Playgroud)

编辑:显然我应该使用mysqli为我的服务器和我检查num_rows的方式是通过执行$ query-> num_rows,因为它是对象的属性.感谢您的帮助!

Ren*_*unt 10

将您的查询更改为喜欢.

$username = mysql_real_escape_string($username); // escape string before passing it to query.
$query = mysql_query("SELECT username FROM Users WHERE username='".$username."'");
Run Code Online (Sandbox Code Playgroud)

但是,MySQL已被弃用.您应该使用MySQLiPDO

  • 请勿使用此代码。它容易受到SQL注入的攻击...查找准备好的语句。 (2认同)
  • @Renish Khunt-如果是新来的人在Google(他们是哪个)上找到它并且认为可以使用,那么显然存在问题。在当今的标准下,您的答案已不再令人满意。我只是建议您更新答案,以免他人误导。我只是想让新的开发人员意识到不再使用它时,您认为它是一种个人侮辱。 (2认同)

Jac*_*son 5

$query = mysql_query("SELECT username FROM Users WHERE username='$username'")

使用准备好的语句,不要使用 mysql,因为它已被弃用。

// check if name is taken already
$stmt = $link->prepare("SELECT username FROM users WHERE username = :username");
$stmt->execute([
    'username' => $username
]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if (isset($user) && !empty($user)){
    // Username already taken
}
Run Code Online (Sandbox Code Playgroud)