2011-01-06 100 views
56

我有一個MySQL語句將一些變量插入到數據庫中。我最近添加了兩個可選的字段($ intLat,$ intLng)。現在,如果這些值沒有輸入,我會傳遞一個空字符串作爲值。如何將明確的NULL值傳遞給MySQL(如果爲空)?MySQL和PHP - 插入NULL而不是空字符串

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng) 
      VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long', 
        '$intLat', '$intLng')"; 
mysql_query($query); 

回答

100

要將NULL傳遞給MySQL,您就是這麼做的。

INSERT INTO table (field,field2) VALUES (NULL,3) 

所以,在你的代碼,查if $intLat, $intLngempty,如果是這樣,使用NULL代替'$intLat''$intLng'

$intLat = !empty($intLat) ? "'$intLat'" : "NULL"; 
$intLng = !empty($intLng) ? "'$intLng'" : "NULL"; 

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng) 
      VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long', 
        $intLat, $intLng)"; 
+3

這並不增加一個MySQL NULL值。這將該屬性設置爲與NULL值不同的字符串「NULL」。我只是說你寫了兩個不同的東西,第一個是正確的,第二個不是我想的。 – G4bri3l 2014-02-21 09:03:55

+16

@ G4bri3l:在`$ query`字符串中,`$ intLat`和`$ intLng`不被引用。所以,當插入變量時,它將是`,NULL,NULL);`。 – 2014-02-21 14:49:44

+1

噢,我現在明白了。太好了!感謝您抽出時間向我指出;) – G4bri3l 2014-02-22 13:38:51

10

如果您沒有通過值,您將獲得默認值的空值。

但是,你可以傳遞NULL而不用引號。

1

檢查構建查詢,如果是空的,將其更改爲字符串NULL之前變量

2

查詢可以去如下:

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng) 
     VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$lng', '" . ($lat == '')?NULL:$lat . "', '" . ($long == '')?NULL:$long . "')"; 
mysql_query($query); 
1

你可以用

做到這一點,例如
UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id' 
2

通常情況下,你經常添加值到MySQL,從PHP這樣的:

function addValues($val1, $val2) { 
    db_open(); // just some code ot open the DB 
    $query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES ('$val1', '$val2')"; 
    $result = mysql_query($query); 
    db_close(); // just some code to close the DB 
} 

當你的價值觀是空/空($ VAL1 == 「」 或$ VAL1 == NULL),並希望NULL被添加到SQL,而不是0或空字符串,以下幾點:

function addValues($val1, $val2) { 
    db_open(); // just some code ot open the DB 
    $query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". 
     (($val1=='')?"NULL":("'".$val1."'")) . ", ". 
     (($val2=='')?"NULL":("'".$val2."'")) . 
     ")"; 
    $result = mysql_query($query); 
    db_close(); // just some code to close the DB 
} 

請注意,null必須添加爲「NULL」而不是「NULL」。非空值必須添加爲「'」。$ val1。「'」等。

希望這有助於我只需要使用這個硬件數據記錄器,其中一些收集溫度和輻射,別人只有輻射。對於那些沒有溫度傳感器,我需要NULL而不是0,原因很明顯(0也是可接受的溫度值)。

1

出於某種原因,radhoo的解決方案不會爲我工作。當我用下面的表達式:

$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". 
    (($val1=='')?"NULL":("'".$val1."'")) . ", ". 
    (($val2=='')?"NULL":("'".$val2."'")) . 
    ")"; 

「空」(帶引號)插入的而不是null沒有引號,使其成爲一個字符串,而不是一個整數。於是,我終於嘗試:

$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". 
    (($val1=='')? :("'".$val1."'")) . ", ". 
    (($val2=='')? :("'".$val2."'")) . 
    ")"; 

導致正確的零(不帶引號),空白插入查詢。

5

所有你需要做的是:$variable =NULL; //並在插入查詢中傳遞它。這將在MySQL中值爲NULL存儲DB

4

這只是正常的我:

INSERT INTO table VALUES ('', NULLIF('$date'='')) 

(第一 '' 增加id字段)