PHP: синтаксис для использования логических переменных в базе данных MYSQL для логики - PullRequest
2 голосов
/ 14 марта 2012

php / mysql нуб с вопросом. В MYSQL, похоже, нет предпочтительного способа хранения логических значений. Я решил пойти с Tiny (int) по предложению кого-то на доске объявлений, который сказал, что это эквивалентно True / False. Я бы подумал, что True = 1 и False = 0 ... может быть, это предполагает много ... В любом случае, для проверки нужно поместить 1 значение в mysql dbase. Они появились в phpAdmin как «1» за то, что это стоит.

Я бы хотел получить эти значения, и если ИСТИНА показывает изображение, а если ложь, то не показывает его. Поэтому после соединения с dbase и выполнения успешного запроса, который нормально возвращает другие текстовые значения, я написал ...

if ($row['email'] == TRUE)
{
echo "<img src='images/email.png'>";
}

В качестве альтернативы вместо ИСТИНА я пробовал 1, «1», «1», «ИСТИНА» и т. Д.

Если я просто отображаю $ row ('email'), я получаю 1. Однако вышеприведенная логика не работает. Условие никогда не подразумевается, и изображение никогда не показывает. Я попытался перевернуть это с! =, Но все еще не могу заставить это работать. Из того, что я читал, логические значения в MYSQL могут быть немного ненадежными, но это кажется довольно простым.

Примечание. С приведенным выше кодом, нет ошибки. Он просто никогда не оценивает оператор в скобках как истинный для выполнения условия. Может ли это быть синтаксическая ошибка ??? или что мне не хватает

Спасибо за любые предложения!

Ответы [ 3 ]

2 голосов
/ 14 марта 2012

Я решил пойти с Tiny (int)

Именно так и поступают миллионы людей по всему миру.

Я думаю, что True = 1 и False = 0

Вот как вы должны это интерпретировать.

if ($row['email'] == TRUE)

не работает

Это должно работать абсолютно и может быть проверено просто с помощью:

$row['email'] = '1';
echo $row['email'] == true; // output: 1

Дважды проверьте содержимое строки $, т. Е. var_dump($row), чтобы убедиться, что данные правильно собираются из базы данных. Проверьте наличие ошибок, возвращаемых из базы данных. Также проверьте наличие ошибок, возвращаемых PHP, поместив это в верхней части вашего скрипта:

ini_set('display_errors', 1);
error_reporting(E_ALL);
2 голосов
/ 14 марта 2012

Если я правильно понимаю, что вы используете

if($row['email'] == 1){ 
echo "<img src='your-path.jpg'></img>";
}else{
 // do nothing if false
}
1 голос
/ 14 марта 2012

Я использую перечисления, потому что они более читабельны в определенных ситуациях;особенно при работе со старой таблицей.

Т.е. "isDeleted" может иметь значения 1/0 или в виде перечисления, "Да / Нет" или, что еще лучше, "Live / Deleted".

Все три описывают одно и то же состояние, но последний пример наносит вам более сильный удар по лицу.

Вводит только сложность, но булевы значения являются бичом всего, что в любом случае является HTML.Запросы MySql для сохранения довольно разумны:

mysql_query( sprintf(
    "update table set isDeleted='%s' where id=3",
    ($myvalue === true ? 'Live' : 'Deleted')
));
...