【发布时间】:2019-11-24 02:07:48
【问题描述】:
我正在学习创建条件事件,其中在插入数据之前存在 sql checkout 数据,因此它们不会发生冲突。
我尝试在 php 中使用 mysql 行检查,然后在我尝试验证查询是否正确执行之前检查查询是否为空。
在条件满足时也尝试关闭数据库连接,但无论如何它毫无价值。
$user = addslashes(strtolower($usr));
$mail = addslashes(strtolower($mail));
$pass = md5(addslashes($pwd));
$check = $db->query("SELECT EXISTS(SELECT *
FROM `users`
WHERE LOWER(`username`) = LOWER('$user')
OR LOWER(`email`) = LOWER('$mail'))");
if (!$check) {
$db->close();
return false;
} else {
$sql = "INSERT IGNORE INTO `users` (`username`, `password`, `email`)
VALUES ('$user', '$pass', '$mail')";
$query = $db->query($sql);
$db->close();
return true;
}
我希望它在数据为空时执行我的查询,并在数据存在时返回 false。
【问题讨论】:
-
var_dump($check)给出了什么?您不应使用addslashes或md5。参数化您的查询并使用password_hash(在需要时使用password_verify)。 -
还要添加到@user3783243 的评论中,这种方法/方法也容易出现竞争条件。如果你想防止重复,你应该在表中添加一个唯一键(也)。
-
@user3783243 它看起来像这样
object(mysqli_result)#3 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) } -
“我认为,用户名和电子邮件这两个字段都使用唯一值?对,那你为什么在这里使用 OR 条件?” @devpro 一些应用程序允许使用用户名登录或电子邮件..
-
完全取决于应用程序。不同的用户可以使用相同的用户名或相同的电子邮件吗?还是只是独特的组合?我会说电子邮件至少应该是唯一的,但同样 - 取决于应用程序的功能和结构。
标签: php mysql conditional-statements