2016-10-21 77 views
0

如何選擇列的位置等於PHP的falsey(例如,當php !$myVar的計算結果爲true時)。MySQL select where column is falsey

到目前爲止,我有:

SELECT * from users 
WHERE firstname = '0' 
    OR firstname = '' 
    OR firstname IS NULL; 

我認爲,涵蓋了大部分的PHP的falsey的,但留下的主要問題則...怎麼樣任意數量的空格?例如,我現在需要爲\ s +做一些正則表達式檢查。而上面的標籤或新行字符。還是有更簡單的方法來處理所有這些?

編輯:

列數據類型爲CHAR(32)

+2

帶空格的字符串應在PHP中評估爲true。 –

+3

PHP認爲錯誤的東西清楚地記錄在:http://php.net/manual/en/language.types.boolean.php。一個非零數字的字符串不是假的。 –

+0

嗯感謝您的意見,正確的,基於我只需要添加一個檢查FALSE的文檔,但當然,列數據類型不是布爾值,它是char(32),所以不需要檢查。怎麼樣一串'0.00'或'00000000000000'。猜猜我現在會繼續調查。 – Andrew

回答

0

做了更多一些調查。 http://php.net/manual/en/language.types.boolean.php是一個開始的好地方。檢查您所知道的數據中可能存在的錯誤。

但是,我希望這只是爲了數據清理的目的。設計一些需要查詢PHP認爲錯誤的東西似乎是一個非常糟糕的主意......請看這些測試結果。

我插入MySQL表以下內容,然後查詢數據庫與PHP和檢查,如果結果被認爲是虛假或不:

考慮FALSE

INSERT into confirm (data) VALUES ('0'); 
INSERT into confirm (data) VALUES (00); 
INSERT into confirm (data) VALUES (000); 
INSERT into confirm (data) VALUES (''); 
INSERT into confirm (data) VALUES (null); 
INSERT into confirm (data) VALUES (' '); 
INSERT into confirm (data) VALUES (' '); 
INSERT into confirm (data) VALUES (' '); #tab character 

考慮TRUE

INSERT into confirm (data) VALUES ('0.00'); 
INSERT into confirm (data) VALUES ('0.000'); 
INSERT into confirm (data) VALUES (0.0); 
INSERT into confirm (data) VALUES (0.00); 
INSERT into confirm (data) VALUES (0.000); 
INSERT into confirm (data) VALUES ('00'); 
INSERT into confirm (data) VALUES ('false'); 
INSERT into confirm (data) VALUES ('null'); 
INSERT into confirm (data) VALUES ('[]'); 
INSERT into confirm (data) VALUES ('array'); 
INSERT into confirm (data) VALUES ('array()'); 

請注意,在MySQL中插入多個空格時,會將其轉換爲空的「'字符串。製表符保持不變(但看起來像是白​​色空間)。

事實上,您可能有標籤字符或PHP認爲錯誤的其他雜項空格字符告訴我,創建一個涵蓋所有可能性的查詢將會很困難。

tldr:你唯一現實的選擇是選擇一切,並檢查腳本是否爲假。

1

在這種情況下,空格將被視爲某些東西,並且所有特殊字符(如換行符)也會一樣。那些不被認爲是錯誤的。真正的問題是爲什麼你選擇以MySQL的方式存儲事物。在MySQL中存儲布爾值的正常方式是使用0或1.這確保了一致性,並且意味着您不必爲所有查詢都這樣做。

您的查詢可以使用,但firstname = NULL也是有效的。

相關問題