使用pdo检查2种情况

时间:2019-07-16 18:30:30

标签: php mysql pdo

在这种情况下如何具有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个条件。有人可以帮忙吗?

此外,我想分别检查它们,以便我可以基于电子邮件或用户设置消息,例如“用户已存在” “电子邮件已存在” 和(如果没有),然后运行执行。

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
    }