2012-03-22 53 views
0

我在數據庫表active中有一列,它應該返回用戶是否已確認郵件。它是tinyint(1),如果它設置爲0,並且我嚴格測試它與FALSE運算符不會返回TRUE。我使用ORM與數據庫進行通信。原始數據類型的數據庫返回值(Kohana ORM)

這在MySQL數據庫設置:
活躍TINYINT(1)是0

if ($user->active === FALSE) // returns FALSE 
if ($user->active === '0') // returns TRUE 

我在API一直在尋找解決方案,並在數據庫類已經有TINYINT數據類型。

我必須使用==而不是===還是有其他事情可以做?

+0

FALSE與0不相同! - http://php.net/manual/en/language.operators.comparison.php – nnichols 2012-03-22 11:15:52

+0

是的,當0不是整數或字符串,而是布爾值時。這就是我想要做的 - 我想從BOOL中返回數據庫中的值,而不是字符串。 – 2012-03-22 11:22:29

+0

不是不是。除此之外,你還說過你從TINYINT(1)返回的數據不是布爾值。無論如何,MySQL並不實現BOOLEAN。它是TINYINT(1)的同義詞。 – nnichols 2012-03-22 11:29:48

回答

2

爲了保持一致,鑄造因爲3.0輾轉DB數據到PHP當量,這意味着你是對的 - 沒有嚴格的比較:)

你可以做什麼,如果你真的想它是覆蓋ORM::_load_values()ORM::list_columns()結合將數據類型轉換爲'正確'(即 - 如果您使用MySQL驅動程序,因爲轉移到PDO將會破壞事物)。

+0

Hvala :) 好吧,我打算用寬鬆的比較。我認爲這是一種不好的做法,但這比改變Kohana核心文件更容易。 – 2012-03-22 18:33:27