Почему не срабатывает TRUE в SQL запросе?

Добрый день, у меня есть таблица с пользователями:
5df7899ea61bc604043942.png
Мне надо получить из неё обычных пользователей и менеджеров (колонка is_manager).
Для получения обычных пользователей я использую такой запрос и он работает:
SELECT * FROM users WHERE is_manager = "FALSE";

Но когда я пытаюсь получить всех менеджеров, то запрос всё равно возвращает обычных пользователей:
SELECT * FROM users WHERE is_manager = "TRUE";

Почему TRUE не срабатывает? Как это исправить?
  • Вопрос задан
  • 5916 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Отвечу на вопрос "почему".
Потому что приведение типов.
Строка "FALSE" - это не булево значение FALSE, а строка, 5 букв. Не имеющая никакого отношения к булевым значениям или числам. Присравнении с числом и РНР и mysql пытаются привести строку к числу. При этом из строки "FALSE" получается 0. И поэтому сравнение "работает". Но разумеется так сравнивать нельзя.

Строка "TRUE" - это, как уже должно быть понятно, не булево значение TRUE, а строка, 4 буквы. Не имеющая никакого отношения к булевым значениям или числам. Присравнении с числом и РНР и mysql пытаются привести строку к числу. При этом из строки "TRUE" получается 0. И поэтому сравнение "не работает". Если передать не строку а булево значение TRUE, то сработает.

Поскольку в mysql нет типа поля boolean, лучше всего не выпендриваться с TRUE и FALSE, а просто передавать 0 и 1.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Lord_Dantes
Как указал автор выше, не надо писать условия TRUE/FALSE в кавычках.
False = 0
True = 1
но,
Когда
"False" = 0 == string
"True" = 0 == string
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы