PHP 更新查询值始终'NULL'字符串而不是 NULL



好吧,我不知道这里发生了什么。我有一个更新查询,三个字段中的两个字段正按照我的需要工作,但无论我对它的值进行了多少预格式化,它在我的转储查询中仍然显示为带引号的"NULL",而不是下面演示的NULL。

这就是我预格式化字段值的方式;

$val1 = (is_null($item1Val)) ? 'NULL' : "'" . stripslashes(json_encode($item1Val)) . "'";     
$val2 = (is_null($item2Val)) ? 'NULL' : "'" . stripslashes(json_encode($item2Val)) . "'";
$val3 = (is_null($item3Val)) ? 'NULL' : "'" . trim($item3Val) . "'";

这是我在代码中使用的更新查询字符串。我也尝试过使用字符串串联,这似乎会产生完全相同的问题;

$dml = "UPDATE table SET
field_1 = $val1,
field_2 = $val2,
field_3 = $val3,
WHERE id = $id;";

然而,当我转储查询时,它是这样显示的;

UPDATE table SET
field_1 = NULL,
field_2 = NULL,
field_3 = 'NULL',
WHERE id = $id;

我丢弃了作为原始数据输入的值,每个值都是真正的NULL值,这正是我想要的。那么,如果它们都是真正的NULL值,那么如何将最后一个变量转换为引号值,而不是前两个变量完全按照需要工作呢?我不知道我在这里会错过什么。

这把我逼疯了!

使用准备好的语句,就像一样

dml = "UPDATE table SET field_1 = ?,field_2 = ?,field_3 = ?,WHERE id = ?;";
$stmt = $mysqli->prepare(dml );
$stmt->bind_param("ssss",$val1, $val2,$val3, $id);
$stmt->execute();
//fetching affected rows
$stmt->close();

$stmt是一个变量,如果您不想执行它或关闭它,可以为它分配新的值。

您使用的是php,因此您应该准备查询并绑定字段:
例如:

$sta = $this->db->prepare('INSERT INTO tableName SET field_1=:field1, field_2=:field2 WHERE id=:id);
$sta->execute([
':field1' => $field_1,
':field2' => $field_2,
':id' => $id
]);

当然,语法取决于你使用的框架

最新更新