Есть фантастический, но недооцененный ответ, Если ваш код делает что-то неожиданное, есть большая вероятность, что вы где-то делаете предположение .
Вы еще не изучили краеугольный каменьКонцепция в искусстве программирования называется 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();
}
Пара замечаний:
- вы всегда должны подключаться только один раз ,Заранее создайте переменную $ db в одном месте, а затем используйте ее везде
- , вы используете подготовленный оператор культа груза , который ничего не защищает. Это должно быть всегда так, как показано в моем примере.
if ($count > 0) return true
- это тавтология . Оператор $count > 0
уже возвращает true
или false
, так что вы можете вернуть его результат сразу, без лишних условий - , более того, 1 так же хорошо, как и истина в PHP. Таким образом, в конце вы можете сразу же вернуть результат fetchColumn (). в случае, если строка найдена, она будет 1 равной true и просто false в противном случае.