检查数据库中是否存在电子邮件?

时间:2012-02-22 20:28:57

标签: php mysqli prepared-statement php-5.3 mysql-num-rows

我的班级中有这个函数或方法,但是当我向其中插入电子邮件时,它不会返回行数。我已经测试了mysql连接等,它们都在工作。另请注意,我通过该方法传递的电子邮件已存在于数据库中。我的计划是获取行数,如果它大于零,则表示我们已在数据库中收到此电子邮件。

public function userExist($email) {
    $query = "SELECT email FROM " . USER_TABLE . " WHERE email = ?";

    $stmt = $this->_db->prepare($query);

    $stmt->bind_param("s", $email);

    if ($stmt->execute()) {
        $stmt->store_result();
        return $stmt->num_rows;
    }
        return false;


}

2 个答案:

答案 0 :(得分:2)

我不知道如何将pdo与mysqli一起使用,但你想要做的是检查条目是否存在使用mysql EXISTS函数而不是获取结果(总是1或0)。

SELECT EXISTS(SELECT 1 FROM ".USER_TABLE." WHERE email = ?) as email_exists

在上面的查询中,email_exists将为1或0,具体取决于电子邮件是否已经在表格中。

使用PDO我会这样做:

$sth = $dbh->prepare("SELECT EXISTS(SELECT 1 FROM ".USER_TABLE." WHERE email = :email)");
$sth->execute(array('email' => $email));
return $sth->fetchColumn();

我会让你弄清楚如何用自己的班级自己做。

答案 1 :(得分:1)

public function userExist($email) {
$query = "SELECT COUNT(*) AS num_rows FROM " . USER_TABLE . " WHERE email = ?";

$stmt = $this->_db->prepare($query);

$stmt->bind_param("s", $email);

if ($stmt->execute()) {
    $stmt->store_result();
    return $stmt->num_rows;
}
    return false;


}

你去了,注意SELECT COUNT(*) AS num_rows(我使用num_rows所以你不必更改你的代码,只要你在执行查询后像$stmt->VAR_NAME那样引用它就可以了。 )