MySQL PDO检查电子邮件是否存在

时间:2014-03-08 21:50:57

标签: mysql pdo rowcount

所以我很难理解为什么我所做的功能检查我的数据库中是否存在电子邮件不起作用......也许这里有人可以帮助我!无论我做什么,它都会返回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.';
    }

4 个答案:

答案 0 :(得分:0)

public string PDOStatement::fetchColumn ([ int $column_number = 0 ] )

它返回一个字符串,因此您不能使用类型相等运算符 使用相等运算符或castto整数

答案 1 :(得分:0)

fetchColumn返回一个字符串:

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

答案 2 :(得分:0)

您的查询会返回email,我认为这是您作为参数传递的电子邮件地址。您检查它是否返回1。那就是出了什么问题。将查询更改为

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

即便如此,您还需要更改

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

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

因为fetchColumn返回一个字符串。

答案 3 :(得分:0)

fetchColumn的文档是:

  

从结果集的下一行返回单个列,如果没有其他行,则返回FALSE。

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

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