在我的数据库类的插入方法中,我将参数作为数组传递:
$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注入,您应该将整个方法转换为准备好的语句;只是说。。。