2011-02-26 40 views
2

我同時獲取數據庫字段值基本上是一個空值是什麼/黑白PHP空值與Mysql數據庫字段爲空值

我試圖

SELECT * FROM table WHERE field=''; //this means null in php 

遇到問題的區別
SELECT * FROM table WHERE field IS NULL; //this means null in mysql db 

這兩個查詢都產生不同的結果。

什麼是b/w都是空值,怎麼可能是空值不同?

+0

用於在SQL中測試null的* correct *方法是'x IS NULL'或'x IS NOT NULL'。這就是它的定義。 'x = NULL'應該爲每個SQL標準返回false(對於* any *'x'),但是在一些SQL實現中已經被打破。這些語義對連接很有用。可悲的是,我沒有回答如何將「傳遞一個空值」變成「IS NULL」 - 但這對於準備好的語句(哦,你*是使用這些,不是?)以及條件選擇「哪個」查詢。但是,我還沒遇到過需要支持NULL的情況,並且試圖爭論一個[空白]非空字段。 – 2011-02-26 07:51:16

+0

從技術上講,''在PHP中是一個*空字符串*它將評估爲一個布爾值false,因此'null =='''但僅僅是因爲'=='操作符不會輸入類型轉換。 'null ==='''是'false'。 – Oerd 2011-04-30 20:10:40

回答

3

查詢數據庫時,PHP的定義被拋出窗口。在SQL中,「」表示一個空字符串。

2

在PHP編程中,由於PHP的==與===相比,null,zero,false和空字符串之間的區別很容易變得模糊。 Oracle,MSSQL和MySql(有時候?)在這方面要嚴格得多。

作爲一種高級語言,PHP允許寬鬆的比較,如PHP type comparison tables所述。

+0

這完全正確。使用'==',一個空字符串和'null'是等價的。但是它們在PHP中確實是不同的值,您可以使用'===','is_string()'和'is_null()'來區分它們。 – 2011-02-26 08:39:39