我有一个 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);
准备好的语句为您完成,无需任何特殊代码
$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 注入的影响。
这对我来说效果很好:
INSERT INTO table VALUES ('', NULLIF('$date',''))
(第一个
''
递增 id 字段)
如果不传递值,则默认值将为空。
但是你可以只传递 NULL 这个词而不用引号。
您所要做的就是:
$variable =NULL;
// 并将其传递到插入查询中。这将在 mysql 数据库中将该值存储为 NULL
通常,您可以从 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 也是可接受的温度值)。
出于某种原因,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."'")) .
")";
空白导致正确的空值(不带引号)被插入到查询中。
您的查询可以如下:
$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);
在构建查询之前检查变量,如果为空,则将其更改为字符串 NULL
例如,您可以使用
UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id'
2022 | PHP 7.3 | PHP 7.3 MySQL 5.7
Rocket Hazmat 接受的答案给了我“NULL”作为字符串。所以我把它改为:
$intLat = !empty($intLat) ? "'$intLat'" : NULL;
$intLng = !empty($intLng) ? "'$intLng'" : NULL;