【问题标题】:Checking if email exists in the database?检查数据库中是否存在电子邮件?
【发布时间】:2012-03-13 05:33:06
【问题描述】:

我的班级中有这个函数或方法,但是当我向其中插入电子邮件时它不返回行数。我已经测试了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;


}

【问题讨论】:

  • 你不需要select email,只要它总是等于$email。更好地执行SELECT COUNT(*)
  • 一切似乎都很好。 display_errors 是否设置为 true,或者是否记录了错误?
  • 我不熟悉 OOP 调试方式,这是我的主要问题,我对 OOP 方式编程感到沮丧。我使用 eclipse 进行编码并使编码变得更加容易,但我需要学习如何调试。你知道什么好的调试工具或者php源码吗?

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


【解决方案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 一样引用它。)

【讨论】:

    【解决方案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();
    

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

    【讨论】:

    • 感谢您的破解,但我更想知道,我在搞砸什么不返回 mysqli num 行...
    猜你喜欢
    • 2014-03-15
    • 2014-05-10
    • 2021-04-24
    • 2023-02-03
    • 2019-06-29
    • 2019-09-17
    • 2019-07-13
    • 2017-09-28
    相关资源
    最近更新 更多