【问题标题】:How can I check if a username already exists in a MySQLi row? [duplicate]如何检查用户名是否已存在于 MySQLi 行中? [复制]
【发布时间】:2017-06-07 01:11:21
【问题描述】:

这是我的数据库 Database img

想象一下模糊的文本只是“测试”。

我有一个基本的登录/注册表单,可以将他们的数据插入数据库。我想确保您不能有 2 个用户使用相同的电子邮件地址,我尝试了以下代码,但由于某些原因,它忽略了这一点,只是让我使用相同的电子邮件创建一个帐户。如果您选择其他人使用过的电子邮件,我将如何编辑此代码以使其显示错误?任何帮助表示赞赏。

$exist = mysqli_query($conn, "SELECT * FROM username WHERE username='".$username."'");

if(mysqli_num_rows($exist) > 0){
    die("email already exists");
}

这是我的$conn。
$conn = new mysqli($servername, $dbusername, $dbpassword, $dbname);

与数据库的连接工作正常。

【问题讨论】:

  • 您说email 并在代码中检查username。如果您正在检查 email 列中的现有记录,则需要在查询中将 WHERE username 替换为 WHERE email。
  • 对不起,我确实需要检查两者,我只是混淆了我的代码,将其更改为电子邮件并没有帮助,虽然。
  • 您的意思是要同时检查username 和email?如果是这样,最好在查询中像这样使用WHERE username = $username OR email = $email。
  • 我认为上述副本的答案不正确。
  • 没有图片,谢谢。

标签: php mysql mysqli


【解决方案1】:

我想确保您不能有 2 个用户使用相同的电子邮件地址

确保这一点的最佳方法是在email 上拥有唯一的约束/索引:

alter table accounts add constraint unq_accounts_email unique (email);

您似乎也希望 username 也一样:

alter table accounts add constraint unq_accounts_username unique (username);

然后,当您尝试插入具有重复项的行时,您将违反约束。

为什么在数据库中这样做更好?最重要的问题是竞争条件——两个人同时尝试注册相同的username 或email。进行检查然后进行插入仍然可以允许重复。

【讨论】:

  • 谢谢。你有任何有用的链接可以帮助我吗?
  • 为什么会被否决?这是问题的正确答案。
  • @H.Sims 。 . .一个好的起点是有关独特约束的文档。
  • 同意。这是正确的答案。
【解决方案2】:

首先将您的查询更改为从accounts 表中进行选择。

那么你正在使用mysqli的过程和面向对象的形式。您使用面向对象的 mysqli 创建连接,然后使用过程 mysqli 函数。

假设你只使用面向对象:

$conn = new mysqli($servername, $dbusername, $dbpassword, $dbname);
$result = $conn->query("SELECT * FROM username WHERE username='".$username."'");
$rows = $result->num_rows;

if($rows > 0) {
    die('email already exists');
}

对于程序将您的连接启动更改为:

$conn = mysqli_connect($servername, $dbusername, $dbpassword, $dbname);

您还可以通过在该用户名列上添加一个 UNIQUE KEY 来强制数据库保持该字段的唯一性

【讨论】:

  • 似乎不起作用?
  • 回显行数,如果脚本走得那么远,我很想知道。还将错误报告设置为 all 并将错误显示设置为 on。如果您在脚本中有错误,真的很好奇。
  • 我该怎么做?我对此很陌生。这周刚开始
  • error_reporting(E_ALL); 和 ini_set('display_errors', 'on'); 显示所有错误
  • 未显示错误。
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 2017-04-27
  • 2019-05-24
相关资源
最近更新 更多