在这种情况下如何具有2个条件?我也要检查电子邮件,不仅用户名。
$checkuser = htmlentities($_POST["username"]);
$data = $connect_pdo->prepare('SELECT username FROM users WHERE username = ?');
$data->bindParam(1, $checkuser);
$data->execute();
if ($data->rowCount() > 0) {
$linha = $data->fetch(PDO::FETCH_OBJ);
//user already exists
} else {
//execute query
}
我还需要检查电子邮件,不仅是用户名,所以脚本中有2个条件。有人可以帮忙吗?
此外,我想分别检查它们,以便我可以基于电子邮件或用户设置消息,例如“用户已存在” 或“电子邮件已存在” 和(如果没有),然后运行执行。
答案 0 :(得分:1)
您只需要检查fetch()
,这比使用rowCount()
更好(因为此方法可能并非在所有数据库中都总是可靠的)。另外请记住,htmlentities()
可以更改数据,因此永远不要将其用于输入(例如对数据库的查询),而只能用于输出(在网站上打印数据时)。
您可以添加一个OR email = ?
条件,并将其单独绑定。
如果要检查一个或两个值是否存在,可以遍历结果集并设置一个值(如果查询中使用的值与数据库中的值匹配)。然后,您可以相应地打印它们。
$matches_found = [];
$data = $connect_pdo->prepare('SELECT username, email FROM users WHERE username = ? OR email = ?');
$data->execute([$_POST["username"], $_POST["email"]]);
if ($row = $data->fetch(PDO::FETCH_OBJ)) {
do {
if ($row->username == $_POST['username']) {
$matches_found['username_exists'] = 'username';
}
if ($row->email == $_POST['email']) {
$matches_found['email_exists'] = 'email';
}
} while ($row = $data->fetch(PDO::FETCH_OBJ));
echo "The ".implode(" and ", $matches_found)." already exists.";
} else {
//execute query
}
请注意,这可能会出现竞争情况-第一个查询返回0个结果,但是在插入查询发生之前的很短时间内,数据就被插入到数据库中。
答案 1 :(得分:0)
此
$checkemail = htmlentities($_POST["email"]); //your e-mail form input
$checkuser = htmlentities($_POST["username"]);
$data = $connect_pdo->prepare('SELECT username FROM users WHERE username = :usr or email = :email');
$data->bindParam(:usr, $checkuser);
$data->bindParam(:email, $checkemail);
$data->execute();
if ($data->rowCount() > 0) {
$linha = $data->fetch(PDO::FETCH_OBJ);
//user already exists
} else {
//execute query
}