99

我有一个 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);
4

9 回答 9

157

要将 NULL 传递给 MySQL,您只需这样做。

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

因此,在您的代码中,检查if $intLat, $intLngare empty,如果是,请使用NULL代替'$intLat'or '$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)";
于 2011-01-06T22:03:24.663 回答
24

这对我来说很好:

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

(首先''增加 id 字段)

于 2016-12-08T13:45:59.610 回答
18

如果您不传递值,您将获得默认值的空值。

但是您可以只传递不带引号的 NULL 一词。

于 2011-01-06T22:04:08.303 回答
13

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

于 2016-05-06T08:39:42.557 回答
4

通常,您从 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 也是可接受的温度值)。

于 2013-10-10T14:32:17.813 回答
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);
于 2011-01-06T22:08:03.990 回答
1

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

于 2011-01-06T22:04:09.017 回答
1

例如,您可以使用

UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id'
于 2013-07-12T19:19:11.470 回答
1

出于某种原因,radhoo 的解决方案对我不起作用。当我使用以下表达式时:

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

'null'(带引号)被插入而不是不带引号的 null,使其成为字符串而不是整数。所以我终于尝试了:

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

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

于 2014-03-08T09:18:20.977 回答