2012-09-30 68 views
10

目前我使用Tinyint(1)來表示我的MySQL數據庫中的Boolean值,我真的不喜歡這樣的值。那麼,我如何通過PHP在我的MySQL數據庫中存儲和檢索Boolean值?在PHP和MySQL中處理'布爾'值

如何在WHERE子句中使用它以及如何正確地指定INSERT, UPDATE查詢中的值?

當我回來的PHP,這是TRUEtrue,或者乾脆1,如果我要去檢查與===

你從Tinyint(1)遷移到BOOLEAN時是否曾遇到過任何問題?

在此先感謝。 :)

更新:

我知道Tinyint(1)相同Boolean,但是我想在Boolean數據類型,而不是Tinyint(1)工作。這就是我問這個問題的原因。

+7

'BOOL,BOOLEAN'只有** **的同義詞爲'TINYINT(1)'在MySQL。 –

+0

謝謝,是的,我知道這一點,但我想在我的PHP端而不是'Tinyint'上工作'布爾',這就是爲什麼我要問這個問題...... – Mahdi

+0

雖然這取決於您的方法,但您可能需要在插入任何int類型時將'true''false'關鍵字轉換爲'int'。我確實相信某些形式的準備好的陳述會爲您做出這種安排,但如果您的查詢是內聯的,那麼這是必要的。 –

回答

15

MySQL沒有布爾數據類型。 Tinyint(1)非常接近。在PHP中使用這個很簡單。

If (1) echo 'true'; // is the same as if (true) 
// Just as 
if (0) echo 'false'; // is the same as if (false) 

如果你真的真的想要一個布爾值,你可以做

// $mysql_data is tinyint value from db 
$boolean = $mysql_data ? true : false; 
// Now you have your boolean as $boolean 
+0

感謝的人,現在我更多地尋找BIT值BTW :) – Mahdi

+0

在MySQL中,TRUE和FALSE值僅僅是1和0的別名,如[mysql文檔](https://dev.mysql。 COM/DOC/refman/5.7/EN /數字型overview.html) – mikewasmike

4

使用布爾值時,請勿使用=== FALSE - 值已爲布爾值(除非函數需要使用===,如strpos())。值是booleanish - 它在技術上是整數,但PHP是動態語言,所以它不是問題。

考慮preg_match()函數 - 它返回匹配數(整數)。

你願意寫嗎?

if (preg_match('/\bregexp?\b/', $variable) === 1) 

還是那個?

if (preg_match('/\bregexp?\b/', $variable)) 

很明顯,沒有明確的方式=== 1更好。你問它是否匹配,而不是它是否有0個匹配。此外,如果您認爲=== 1更安全,爲什麼不做=== 1 === TRUE

當然,可以使用(bool)!!將值轉換爲布爾值。

此外,在某些語言(如C或Perl)中,布爾和數字之間沒有區別。它只是工作。

+0

嘿,謝謝!對我來說真的很有趣! :) – Mahdi