我对为什么我的代码在期望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给我返回了预期的行,因为它存在于数据库中,但是当我运行此代码时,我得到了false
返回。
我在哪里出错了?
答案 0 :(得分:3)
有一个很棒但又被低估的答案,If your code is doing something unexpected, there's a good chance you're making an assumption somewhere。
您尚未学习称为 debugging 的编程艺术的基石概念。这意味着您应该验证自己所做的每个假设。
您在这里假设当查询返回一行时,(int)$checkedmac->fetchColumn();
语句返回一个正数。因此,您必须进行验证。
我可以假设 您表中的第一列不包含正数,而是一个字符串。带数字的字符串将返回0。它将解释为什么在找到记录时得到0。但是您也必须进行验证。
如果我的假设被证明是正确的,则只需选择一个常数值而不是不确定的*
。例如,您可以使用1
,您的查询将完美运行:
public function CheckMac($db, $mac){
$stmt = $db->prepare("SELECT 1 FROM `displays` WHERE `displayMac` = ?");
$stmt->execute([$mac]);
return $stmt->fetchColumn();
}
一些注意事项:
if ($count > 0) return true
是重言式。 $count > 0
语句已经返回了true
或false
,因此您可以返回其结果,而不会产生多余的条件