我有一个pdo函数,该函数使用数组将值添加到表中。它添加得很完美,我的问题是,如果数组值为空,则必须将其添加为NULL值,而不是数据库中的空白字段。我有一个数组,用于创建mysql查询。例如数组
$arr = [
'table' => [
'fields' => [
'id',
'keyname',
'lang',
'value'
],
'values' => [
'',
'some key name',
'some lang',
'some value'
]
]
];
我尝试了以下操作(仅是一个基本示例)
foreach($array as $a => $v) {
foreach($v as $p => $r){
foreach($r as $f){
$val = NULL;
$f = trim($f);
if (empty($f)) {
$stmt->bindParam($f, $val, PDO::PARAM_NULL);
echo "empty <br/>";
}
}
}
}
上面对于数组中的所有空值确实返回true,但是当我运行将值插入数据库的方法时,它们显示的是空白字段,而不是NULL
。我还尝试了array_map
函数,该函数根本不起作用。
这是我正在编写的全部功能:
public function add($array) {
$result = true;
foreach($array as $a => $v) {
// the pdoquery prepares the statement to work as mysql query
$sql = $this->pdoquery($a, $v);
$query = "INSERT INTO " . $sql;
$stmt = $this->db->prepare($query);
////this is where I am adding the foreach loops
$exec = $stmt->execute();
if(!$exec) $result = false;
}
if($result) {
$id = $this->db->lastInsertId();
return $id;
}
else return false;
}
答案 0 :(得分:0)
当您像这样插入数据库时,只需提供NULL
而不是空字符串''
,就可以了:
$arr = [
'table' => [
'fields' => [
'id',
'keyname',
'lang',
'value'
],
'values' => [
null,
'some key name',
'some lang',
'some value'
]
]
];
然后它将保留为空而不是空字符串。
还请注意,您在DB中的字段结构必须允许它为NULL,否则它将返回错误field cannot be null