在sql查询中插入NULL


INSERT NULL into sql query using php

我有以下代码:

$var1 = NULL;
$var2 = NULL;
$var3 = NULL;
$var4 = NULL;
/*  (...) code for logical flow condition (...) */
/* After the code, only var1 is different
 */
// $var1 = "something"
$query = "INSERT INTO (...) VALUES ('$var1','$var2','$var3','$var4');

事情是这样的:所有变量的所有字段都是唯一的。代码的问题是,数据库没有插入"$var2,3,4的重复值",因为它插入的变量是' '而不是NULL。我希望值是NULL 但是维护它在一个连贯的查询…在一种连接中,如果你可以说,为了不破坏我的逻辑流代码的简单性…

我想要

$query = "INSERT INTO (...) VALUES ('$var1','$var2','$var3','$var4');

$query = "INSERT INTO (...) VALUES ('$var1',NULL,NULL,NULL);

而不是how it is:

$query = "INSERT INTO (...) VALUES ('$var1','','','');

那么,我怎么能做到这保持变量在查询,无论是NULL和非NULL?Tyvm for your help

您需要测试该值是字符串还是null,并且只有当它是字符串时才在SQL中添加引号:

$var1_sql = $var1 === null ? "NULL" : "'$var1'";
$var2_sql = $var2 === null ? "NULL" : "'$var2'";
$var3_sql = $var3 === null ? "NULL" : "'$var3'";
$var4_sql = $var4 === null ? "NULL" : "'$var4'";
$query = "INSERT INTO (...) VALUES ($var1_sql, $var2_sql, $var3_sql, $var4_sql)";

但是最好使用准备好的查询。

$query = "INSERT INTO (...) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($query);
$stmt->bind_param("ssss", $var1, $var2, $var3, $var4);
$stmt->execute();

试试这样:

$var1 = NULL;
$var2 = "'a value'";
$var3 = NULL;
$var4 = "'another val'";
$query = "INSERT INTO (...) VALUES ($var1,$var2,$var3,$var4)";