MySQL和PHP – 插入NULL而不是空string

我有一个MySQL语句插入一些variables到数据库中。 我最近添加了两个可选的字段($ intLat,$ intLng)。 现在,如果这些值没有input,我会传递一个空string作为值。 如何将一个显式的NULL值传递给MySQL(如果为空)?

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

要传递一个NULL到MySQL,你就是这么做的。

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

所以,在你的代码中,检查if $intLat, $intLng是否为empty ,如果是,则使用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)"; 

如果你不传递值,你会得到默认值的空值。

但是你可以传递NULL而不用引号。

你所要做的只是: $variable =NULL; //并在插入查询中传递它。 这将在mysql数据库中将值存储为NULL

这对我来说很好:

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

(首先“增加id字段)

通常情况下,你可以像这样从PHP中为MySQL添加常规值:

 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或空string时,请执行下列操作:

 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。“'”等。

希望这有帮助,我只是用这个硬件数据logging器,其中一些收集温度和辐射,其他只是辐射。 对于那些没有温度传感器,我需要NULL和不是0,原因很明显(0也是一个公认的温度值)。

您的查询可以如下所示:

 $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); 

在构build查询之前检查variables,如果它们为空,则将它们更改为stringNULL

你可以用它来做

 UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id' 

出于某种原因,radhoo的解决scheme不适合我。 当我使用下面的expression式:

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

“null”(带引号)被插入而不是空引号,使其成为一个string而不是一个整数。 所以我终于试过了:

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

空白导致正确的空(未加引号)被插入到查询中。