Email PDO准备了Select语句,用于检查用户是否存在

Email PDO准备了Select语句,用于检查用户是否存在,email,select,pdo,prepared-statement,match,Email,Select,Pdo,Prepared Statement,Match,我是pdo新手,需要准备并执行一些php/pdo代码: 此代码允许我在数据库中创建用户: // Perform Insert / Update $STH = $dbh->prepare("INSERT INTO users (username, email) values (:username, :email)"); $STH->bindParam(':username', $username); $STH->bindParam(':email', $email);

我是pdo新手,需要准备并执行一些php/pdo代码: 此代码允许我在数据库中创建用户:

    // Perform Insert / Update
$STH = $dbh->prepare("INSERT INTO users (username, email) values (:username, :email)");
$STH->bindParam(':username', $username);
$STH->bindParam(':email', $email);
    try{
    $STH->execute();
    redirect_to(signupsuccess.php);
    }
catch(PDOException $e) {  
echo "I'm sorry, Dave. I'm afraid I can't do that.";  
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); 
}
    }
但是,在我将数据放入数据库之前,我需要做一个检查,以确保数据库中不存在该电子邮件。我需要做一个选择,比如:

    $STH = $dbh->prepare("SELECT FROM users (email) values (:email)");
$STH->bindParam(':email', $email);
try{
    $STH->execute();
      }
我知道我需要补充

    "WHERE something matches '$_POST'email') something.." ...

在这一点上我完全迷路了。我可以不用PDO来做这件事,但我想开始使用PDO准备好的语句。请帮助

只需做一个简单的选择。如果您可能有空电子邮件,我建议使用bind值

$STH = $dbh->prepare("SELECT email FROM users WHERE email = :email");
$STH->bindValue(':email', $email);
try{
    $STH->execute();
}

然后检查是否返回了任何记录。如果是,请更新,不要插入。祝你好运。

谢谢你的回答。我假设绑定部分将有助于防止sql注入,防止提供的电子邮件进入语句中准备好的插槽(:email)之外的任何位置?另外:我是否必须使用$STH2而不是$STH?我已经在使用$STH进行插入/更新,我要过很长时间才能关闭连接。另外:添加限制1是否有任何害处/好处?请随时重新使用连接。添加限制1应该没有什么害处,事实上它可以提高select的性能(因为您只关心是否存在任何重复的电子邮件),特别是当电子邮件不是索引列时。是的,本例中的绑定特别会阻止注入。