我期望为假时我的函数返回true

问题描述 投票:-1回答:1

我对为什么我期望true时代码返回false感到困惑,反之亦然。这是我的代码:

public function CheckMac($mac){
    $database = new Database();
    $db = $database->connectDatabase();
    $checkedmac = $db->prepare("SELECT * FROM `displays` WHERE `displayMac` = '$mac'");
    $checkedmac->execute();
    $count = (int)$checkedmac->fetchColumn();
    if ($count > 0) {
        return true;
    } else {
        return false;
    }
}

我拥有正确的查询,当我回显$mac并将其放入查询中时,由于它存在于数据库中,因此phpMyAdmin给我返回了预期的行,但是当我运行此代码时,我得到的是[C0 ]返回。

我在哪里出错了?

php function pdo return boolean
1个回答
3
投票

[一个不错的答案,但被低估了,false

您尚未学习称为debugging的编程艺术的基石概念。这意味着您应该验证您所做的每个假设

[您在这里假设,当查询返回一行时,If your code is doing something unexpected, there's a good chance you're making an assumption somewhere语句返回一个正数。因此,您必须进行验证。

我可以做出假设,您表中的第一列不包含正数,而是一个字符串。带数字的字符串将返回0。它将解释为什么在找到记录时得到0。但是您也必须进行验证。

如果我的假设被证明是正确的,则只需选择一个恒定值而不是不确定的(int)$checkedmac->fetchColumn();。例如,您可以使用*,您的查询将完美运行:

1

一些注意事项:

  • 您应该始终仅连接once。预先在一个地方创建$ db变量,然后在任何地方使用它
  • 您使用的是public function CheckMac($db, $mac){ $stmt = $db->prepare("SELECT 1 FROM `displays` WHERE `displayMac` = ?"); $stmt->execute([$mac]); return $stmt->fetchColumn(); } ,它不受任何保护。它应该始终是我的示例中显示的方式。
  • cargo cult prepared statement重言式if ($count > 0) return true语句已经返回了$count > 0true,因此您可以返回其结果,而不会产生多余的条件。
  • 此外,在PHP中1和true一样好。因此,最后您可以立即返回fetchColumn()的结果。如果找到该行,则它将为1等于true,否则为false。
© www.soinside.com 2019 - 2024. All rights reserved.