fetchAll(PDO :: FETCH_ASSOC)不返回单个值

时间:2014-05-07 19:00:26

标签: php pdo

当我使用下面的代码时,我得到Undefined Index: email on $row['email']。如果我用$row和print_r抓取整个数组,它会显示它应该的样子。 我哪里错了?

            $stmt = $db->dbh->prepare("SELECT email FROM $this->table WHERE `email`= :email");
            $stmt -> bindValue(':email', $email);
            $stmt->execute();
            while ($row = $stmt->fetchAll()){
                 return $row['email'];
              }

$new = new Users;
 echo $new->reset_password($email);
}

3 个答案:

答案 0 :(得分:2)

fetchAll返回所有结果的二维数组。要一次只获取一行,您应拨打$stmt->fetch(),而不是$stmt->fetchAll()

while ($row = $stmt->fetch()) {
    ...
}

但是既然你回来了,你根本就不应该使用循环。 return语句将在第一次迭代后终止循环。只需使用if声明。

if ($row = $stmt->fetch()) {
    return $row['email'];
}

这整段代码没有多大意义 - $newemail保证与$email相同,你为什么要归还它?它可能应该是:

if ($stmt->fetch()) { // Email was found
    return true;
} else {
    return false;
}

答案 1 :(得分:1)

检查数据库中是否输入了电子邮件,

$stmt = $db->dbh->prepare("SELECT 1 FROM $this->table WHERE email= ?");
$stmt->execute([$email]);
return $stmt->fetchColumn();

答案 2 :(得分:0)

您应该使用以下代码:

while ($row = $stmt->fetch()){
    $newemail = $row['email'];             
}

而不是这段代码:

while ($row = $stmt->fetchAll()){
    $newemail = $row['email'];
}

方法fetchAll()在一次调用中获取所有行,方法fetch()仅获取当前行并将指针移动到下一行。

可以找到方法fetch()的文档here,可以找到方法fetchAll的文档here