php - 使用 pdo 检查 2 个条件

标签 php mysql pdo

在这种情况下如何满足两个条件?我也想检查电子邮件,而不仅仅是用户名。

$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
}

我还需要检查电子邮件,而不仅仅是用户名,因此脚本中有两个条件。有人可以帮忙吗?

此外,我想单独检查它们,这样我就可以根据电子邮件或用户设置消息,例如“用户已存在”“电子邮件已存在”> 并(如果没有)然后运行执行。

最佳答案

您只需要检查 fetch(),这是比使用 rowCount() 更好的替代方法(因为此方法在所有数据库中可能并不总是可靠) 。另请记住,htmlentities() 可以更改数据,因此永远不应该在输入(如对数据库的查询)上使用它,而只能在输出(在网站上打印数据时)使用。

您可以添加 OR email = ? 条件,并单独绑定(bind)它。

如果要检查其中一个或两个值是否存在,您可以循环遍历结果集,并在查询中使用的值与数据库中的值匹配时设置一个值。然后您可以相应地打印它们。

$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 个结果,但数据在插入查询发生之前的很短的时间窗口内插入到数据库中。

关于php - 使用 pdo 检查 2 个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063443/

相关文章:

php - 在一个查询 PHP/SQL 中比较来自多个表的列

mysql - 仅当表 1 中存在类似记录时才插入表 2

php - 类方法的 beginTransaction PDO

php - SQL - 改进 JOIN 查询(​​需要很长时间才能加载)

php - 处理多个并发的大型上传

php - 请帮助,上传 csv 文件时出现错误

php - 检查行是否存在以及是否没有插入数据

mysql - mysql中如何将列转换为数组?

php - 在mysql中获取带或不带撇号的字符串

mysql - SQL 不同的 'group by' 和 'date range' 子查询减慢了整个查询