2015-03-06 2 views
0

Я столкнулся с неожиданным поведением с типом данных MySQL BIT. Выполнив следующий PHP код:Тип данных MySQL BIT всегда равен 1

$query="INSERT INTO REQUESTS_OFFERS (PROPOSAL,REQUESTS_REQUESTID,PERIOD) 
    VALUES ('".$offer."','".$requestid."','".$periodkind."')";  

период столбец, который имеет тип данных BIT всегда обращаются к 1, даже если PHP переменная $ periodkind равен 0 !! Я не могу это объяснить. При попытке изменить вручную 1 на 0 внутри MySQL нет проблем ...

У вас есть идеи, почему это происходит?

Большое спасибо

+0

Если у вас есть немного, почему вы обертываете '' 'вокруг него, как строку? Вероятно, вставка строки ''0'', а не целое число' 0', может заставить MySQL хранить ее как '1' ... вам придется протестировать это. – developerwjk

ответ

1

Если столбец является BIT тип данных, вам не нужно обернуть вар в «'», потому что это будет интерпретироваться как строка, и вы хотите немного.

Попробуйте удалить одиночные кавычки, и если это не сработает, попробуйте отдать свой $ periodkind к BOOL, как это:

(bool)$periodkind 

ТОЛЬКО ЕСЛИ MySQL преобразует ложное значение 0 и верно 1 в BIT тип данных

1

Вы используете PDO или mysqli? почему бы вам не использовать инструкцию?

Вы должны это сделать!

Но быстрое решение для вас я считаю (удалить одиночные кавычки periodkind):

$query="INSERT INTO REQUESTS_OFFERS (PROPOSAL,REQUESTS_REQUESTID,PERIOD) 
    VALUES ('".$offer."','".$requestid."',".$periodkind.")"; 

кстати ваш тип БИТ BIT (1)?

Смежные вопросы