За последние 24 часа нас посетил 64381 программист и 1745 роботов. Сейчас ищут 1865 программистов ...

SQL тип BIT и PHP

Тема в разделе "PHP для новичков", создана пользователем Rentony, 14 фев 2012.

  1. Rentony

    Rentony Активный пользователь

    С нами с:
    14 фев 2012
    Сообщения:
    20
    Симпатии:
    0
    Подскажите как работать с этим типом.
    в phpMyAdmin он принимает значение 1 либо 0, но на деле не являются таковым, и даже не является bolean...
    пишу так:
    Код (Text):
    1. $result = mysql_query("SELECT * FROM send_me");
    2. while ($mar = mysql_fetch_array($result)){
    3.     if ($mar['room_1']==1){
    4.         echo 1;
    5.     };
    6. }
    но echo 1; не происходит, пишу так: if ($mar['room_1']==true) происходит echo 1; , и даже тогда когда по идеи стоит false
    подскажите что нужно писать, к чему приравнивать что бы узнать его значение?
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    если в столбике room_1 написанно true
    то проверку надо так:
    Код (PHP):
    1. $result = mysql_query("SELECT * FROM send_me");
    2. while ($mar = mysql_fetch_assoc($result)){
    3.    if ($mar['room_1']=='true'){
    4.       echo 1;
    5.    }
    6. } 
    и не нужно ставить после if конструкции оператора ;
     
  3. Rentony

    Rentony Активный пользователь

    С нами с:
    14 фев 2012
    Сообщения:
    20
    Симпатии:
    0
    в столбике room_1 написанно не true, написанно 1, но не работает так, если ставлю тип данных INT, то всё работает, а с типом данных BIT не работает((, вот и хотел узнать к чему нужно приравнивать этот столбик.
    и да - если пишу echo $mar['room_1'] то ничего не выводит х_Х
     
  4. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Код (Text):
    1. var_dump($mar['room_1']);
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Вардамп сделай и покажи что напишет.
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. if($mar['room_1']=='1') 
    не поможет?
     
  7. Rentony

    Rentony Активный пользователь

    С нами с:
    14 фев 2012
    Сообщения:
    20
    Симпатии:
    0
    сделал Вардамп, вот что пишет
    Код (Text):
    1. string(1) ""
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Нда, уж " [пробел] ", что - то намудрили видимо, если бы было пусто он бы вернул NULL.
    Да и вообще, что тип boolean, что тип bit почти одно и тоже.
     
  9. Rentony

    Rentony Активный пользователь

    С нами с:
    14 фев 2012
    Сообщения:
    20
    Симпатии:
    0
    вот именно что почти... эх, ладно, сделаю тип INT(1)
     
  10. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вообще насколько я помню (давно уже одиночные биты не использую - женился на бинарных полях) скуэль не возвращает кол-во бит, указанное в длине поля типа бит, а дополняет слева до полного байта. в вашем случае бит 1 в возвращается как байт из бит 0000-0001, и соответствует байту SOH таблицы ASCII - браузер заменяет его квадратиком потому что вариантов отображения нет. касательно условий выборки - вроде (уж давно это было и сурсы лень искать) хватало конструкции вроде if($r['bit_value']). то есть мы не сравниваем с каким-либо конкретным значением (true,1, etc)
     
  12. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Код (PHP):
    1. while ($mar = mysql_fetch_array($result)){
    2.    if (ord($mar['room_1'])==1){
    3.       echo 1;
    4.    };
    5.  
     
  13. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    ENUM вам в помощь!


    BIT(n) — строка битов постоянной длины.
    BIT VARYING(n) — строка битов переменной длины.
     
  14. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Не стоит для подобных бит-данных подсовывать стринги.
     
  15. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Возможно, ну вот еще есть smallint.

    Ну и еще тут:
    http://msdn.microsoft.com/ru-ru/library/ms187745.aspx
     
  16. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Перестаньте выдумывать -))
    для хранения TINYINT нужен 1 байт, для SMALLINT 2 байта
     
  17. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    INT 4 байта.
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    бит не влезит... надо BIGINT
     
  19. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Вы меня удивляете =))
    LONGBLOB

    ЗЫ: Дабы перестать троллить, топикстартер твой выбор TINYINT(1) UNSIGNED