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

问题描述 投票:0回答:10

我有一个 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);
php mysql null sql-insert
10个回答
168
投票

准备好的语句为您完成,无需任何特殊代码

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng)
          VALUES (?,?,?,?,?,?)";
$data = [$notes, $id, $imageUploaded, $lat, $long, $intLat, $intLng];
$conn->prepare($query)->execute($data);

就这么简单。

任何包含 PHP

null
的变量都将被写为 MySQL null。更不用说这个查询是安全的,不会受到 SQL 注入的影响。


28
投票

这对我来说效果很好:

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

(第一个

''
递增 id 字段)


18
投票

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

但是你可以只传递 NULL 这个词而不用引号。


13
投票

您所要做的就是:

$variable =NULL;
// 并将其传递到插入查询中。这将在 mysql 数据库中将该值存储为 NULL


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
}

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


2
投票

出于某种原因,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."'")) . 
    ")";

空白导致正确的空值(不带引号)被插入到查询中。


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
投票

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


1
投票

例如,您可以使用

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

0
投票

2022 | PHP 7.3 | PHP 7.3 MySQL 5.7

Rocket Hazmat 接受的答案给了我“NULL”作为字符串。所以我把它改为:

$intLat = !empty($intLat) ? "'$intLat'" : NULL;
$intLng = !empty($intLng) ? "'$intLng'" : NULL;
© www.soinside.com 2019 - 2024. All rights reserved.