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

use*_*794 75 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);
Run Code Online (Sandbox Code Playgroud)

Roc*_*mat 126

要将NULL传递给MySQL,就可以做到这一点.

INSERT INTO table (field,field2) VALUES (NULL,3)
Run Code Online (Sandbox Code Playgroud)

因此,在您的代码中,检查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)";
Run Code Online (Sandbox Code Playgroud)

  • @ G4bri3l:在`$ query`字符串中,没有引用`$ intLat`和`$ intLng`.因此,当插入变量时,它将是`,NULL,NULL);`. (21认同)
  • 这不会添加mysql NULL值.这将属性设置为字符串"NULL",这与mysql NULL值不同.我只是说你写了两个不同的东西,第一个是正确的,第二个不是我想的. (5认同)
  • 哦,是的,我现在看到了.太好了!感谢您抽出宝贵的时间向我指出;) (2认同)
  • @alessadro:这个问题很老了.如果您将变量连接到这样的SQL查询中,那么您做错了!请切换到在PDO或MySQLi中使用预准备语句. (2认同)

dkr*_*etz 14

如果不传递值,则默认值为空.

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

  • 如果以这种方式设置表,他将仅默认为NULL. (8认同)
  • 对我而言,"可选"意味着什么. (2认同)

小智 13

这对我来说很好用:

INSERT INTO table VALUES ('', NULLIF('$date',''))
Run Code Online (Sandbox Code Playgroud)

(首先''增加id字段)


Sha*_*war 11

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


rad*_*hoo 5

通常,您可以从 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
}
Run Code Online (Sandbox Code Playgroud)

当您的值为空/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
}
Run Code Online (Sandbox Code Playgroud)

请注意,null 必须添加为 "NULL" 而不是 "'NULL'" 。非空值必须添加为“'”.$val1.“'”等。

希望这会有所帮助,我只需将其用于一些硬件数据记录器,其中一些收集温度和辐射,其他仅收集辐射。对于那些没有温度传感器的人,出于明显的原因,我需要 NULL 而不是 0(0 也是可接受的温度值)。