【问题标题】:MySQL PDO Check if email existsMySQL PDO 检查电子邮件是否存在
【发布时间】:2014-03-08 21:50:56
【问题描述】:

所以我很困惑为什么我检查数据库中是否已经存在电子邮件的功能不起作用......也许这里有人可以帮助我!无论我做什么,它都会返回 false,我不知道为什么。下面的这个函数在一个名为 classes.php 的文件中。是的,classes.php 与包含数据库连接代码的文件一起包含在 activate.php 中。

    public function emailExists($email) {
        $query = $this->db->prepare('SELECT `email` FROM `users` WHERE `email` = ?');
        $query->bindValue(1, $email);
        try {
            $query->execute();
            if ($query->fetchColumn() === 1) {
                return true;
            }
            else {
                return false;
            }
        }
        catch (PDOException $e) {
            die ($e->getMessage());
        }
    }

下一段代码在一个名为 activate.php 的文件中

    $email = $_GET['email']; // Gets email from URL
    if ($users->emailExists($email) === false) {
        $errors[] = 'Sorry, that email address doesn\'t exist.';
    }

【问题讨论】:

  • 试试:if ($query->fetchColumn() == $email)
  • ^ 为什么我没想到那个 LOL。那解决了它!非常感谢!

标签: mysql pdo rowcount


【解决方案1】:
public string PDOStatement::fetchColumn ([ int $column_number = 0 ] )

它返回一个字符串,所以你不能使用类型相等运算符 使用相等运算符或强制转换为整数

【讨论】:

    【解决方案2】:

    fetchColumn 返回一个字符串:

        if ($query->fetchColumn() == $email) {
            return true;
        }
    

    【讨论】:

      【解决方案3】:

      您的查询返回email,我假设它是您也作为参数传递的电子邮件地址。你检查它是否返回1。这就是问题所在。将查询更改为

      SELECT 1 FROM `users` WHERE `email` = ?
      

      即便如此,你也需要改变

      if ($query->fetchColumn() === 1) {
      

      if ($query->fetchColumn() === '1') {
      

      因为 fetchColumn 返回一个字符串。

      【讨论】:

      • 这也有效!你会建议这种方法吗? if ($query->fetchColumn() == $email) { return true; }
      • 相同的区别。从理论上讲,我的查询会更快,但这太理论化了,它可能无法测量。此外,我尽可能喜欢严格的 (===) 运算符,但您也可以在与$email 进行比较时使用它,因为它也是一个字符串。任何一种解决方案都可以,还有其他解决方案。任君挑选。 :)
      • 感谢您的宝贵时间和快速回复。我学到了一些新东西,您帮助我解决了这个问题,我非常感谢。
      【解决方案4】:

      fetchColumn 的文档中是:

      从结果集的下一行返回单列,如果没有更多行,则返回 FALSE。

      您检查条件中的错误值。更好的是:

      if ($query->fetchColumn() !== false) {
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-28
        • 2014-04-10
        • 2013-01-05
        • 1970-01-01
        • 2020-03-22
        • 2021-04-24
        • 2022-01-20
        • 2016-04-06
        相关资源
        最近更新 更多