PHP:如何在内爆数组时保持NULL


PHP: How to keep NULL when imploding array

在我的数据库类的插入方法中,我将参数作为数组传递:

$sql='INSERT INTO `'.$table.'` (`'.implode('`, `',array_keys($params)).'`) VALUES ("' . implode('", "', $params) . '")';

正如你所看到的,数组被内爆了。

例如,我的$params如下所示:

$params = [
  'field1' => 'sometext1',
  'field2' => 'sometext2',
  'stamp_created' => NULL
]

我的字段'stamp_created'必须设置为NULL,以便在数据库的数据行中显示创建日期。但是,内爆数组会将NULL变成空字符串"":

VALUES ('sometext1', 'sometext2', '')

如何实现NULL在我的内爆操作中不被忽略?我想要的结果是:

VALUES ('sometext1', 'sometext2', NULL)

PHP的null在转换为字符串时会产生一个空字符串。相反,你想要的是字符串'NULL',所以你必须做更多的手动工作才能实现:

$values = join(', ', array_map(function ($value) {
    return $value === null ? 'NULL' : "'$value'";
}, $params));

请注意,此代码极易发生SQL注入,您应该将整个方法转换为准备好的语句;只是说。。。