【问题标题】:Why does my pdo statement result always return true?为什么我的 pdo 语句结果总是返回 true?
【发布时间】:2014-04-18 00:49:42
【问题描述】:

我正在将旧的登录脚本从 mysql_query 转换为 pdo,但我有点挣扎

我要做的就是找出数据库中是否存在电子邮件!

我的代码

public function doesEmailExist($userEmail)
{

    $db = new PDO('mysql:host=localhost;dbname=servershop', 'user', 'pass');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $db->prepare("SELECT COUNT(`uid`) FROM `user` WHERE `email`= ?");
    $stmt->bindValue(1, $userEmail);

    try
    {

        $stmt->execute();
        $rows = $stmt->fetchColumn();

        if($rows == 1)
        {
            return true;
        }
        else
        {
            return false;
        }

    }
    catch (PDOException $e)
    {
        die($e->getMessage());
    }
}

不管邮件是否存在于表中,代码总是返回true?

难道没有像sql中的count_rows这样简单的方法吗?

【问题讨论】:

  • 你试过var_dump($rows)看看你得到了什么?
  • 您能否发布旧的、工作 MySQL 代码,以便与您的新代码进行比较?
  • @Niet string '0' (length=1)
  • 好的,现在无论你在哪里调用这个函数,把它改成var_dump($this->doesEmailExist($userEmail))(或类似的)
  • @Phil 抱歉,它不见了 :-) 但是这是你的基本选择 * from table where conditionismet -> $no_of_rows = mysql_num_rows($result);

标签: php pdo


【解决方案1】:

改变这个:

$rows = (int) $stmt->fetchColumn();

它应该可以工作。

【讨论】:

  • C:\Users\Niet>php -r "var_dump('0' == 1);" prints bool(false) -- 我反驳了你的说法,即“如果你做 '0' == 1 那就是真的”
  • @Henrique,不管是什么符号,你的实际答案就像一个魅力:-)
  • 是的,这很奇怪。回家后我会做一些测试来弄清楚为什么会这样......
猜你喜欢
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 2023-03-11
  • 2011-09-19
  • 1970-01-01
  • 2015-12-16
相关资源
最近更新 更多