MySQL和PHP - 插入NULL而不是空字符串

时间:2011-01-06 22:00:42

标签: php mysql null sql-insert

我有一个MySQL语句,它将一些变量插入到数据库中。我最近添加了2个可选字段($ intLat,$ intLng)。现在,如果没有输入这些值,我将空字符串作为值传递。如何将显式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);

9 个答案:

答案 0 :(得分:121)

要将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)";

答案 1 :(得分:12)

如果你没有传递值,你将获得默认值的空值。

但你可以在没有引号的情况下传递单词NULL。

答案 2 :(得分:8)

这对我来说很好用:

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

(首先''递增id字段)

答案 3 :(得分:7)

您所要做的就是:$variable =NULL; //并在插入查询中传递它。这将在mysql db

中将值存储为NULL

答案 4 :(得分:3)

通常,您可以像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
}

当您的值为空/ null($ 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也是可接受的温度值)。

答案 5 :(得分: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);

答案 6 :(得分:1)

在构建查询之前检查变量,如果它们为空,则将它们更改为字符串NULL

答案 7 :(得分:1)

你可以用

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

答案 8 :(得分: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."'")) . 
    ")";
  

空白导致在查询中插入正确的null(未引用的)。