这是我的数据库 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);
与数据库的连接工作正常。
答案 0 :(得分:0)
我想确保您不能让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
。执行检查然后执行插入仍然允许重复。
答案 1 :(得分:-2)
首先将您的查询更改为从$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');
}
表中选择。
然后你正在使用mysqli的面向过程和面向对象的形式。使用面向对象的mysqli创建连接,然后使用过程mysqli函数。
我们假设您只使用面向对象:
$conn = mysqli_connect($servername, $dbusername, $dbpassword, $dbname);
用于程序更改您的连接启动:
$step = 3;
$injectedValue = "X";
$arrayOfArray = array_chunk($myArr, $step);
$myArr = [];
foreach($arrayOfArray as $k => $v){
array_push($v, $injectedValue);
$myArr = array_merge($myArr, $v);
}
print_r($myArr);
您还可以通过在该用户名列上添加UNIQUE KEY来强制执行数据库以使该字段保持唯一