我的问题是我的数据库列设置为NULL
`max_vol` MEDIUMINT UNSIGNED NULL,
和我的$ _POST ['max_vol []']是一个空字符串(''),直到插入或更新数据库中的行(带有print_r()的测试输出)。然后它插入0(零)而不是NULL。
如果我明确地将max_vol设置为NULL,那么它就可以了。
$value['max_vol'] = empty($value['max_vol']) ? NULL : $value['max_vol'];
但为什么会这样呢?我以为将一个空字符串设置为MySQL(带有NULL设置)插入NULL。这是我的原始代码。 CodeIgniter的查询构建器是否会发生变化?
$position_form_data = array(); // positions form data store
// process the form data into arrays for database operations
foreach( $_POST as $post_key=>$post_value ) {
// ignore non-array post variables
if( is_array( $post_value ) ) {
foreach( $post_value as $form_key=>$form_value ) {
if (!isset($position_form_data[$form_key])) {
$position_form_data[$form_key] = array();
}
$position_form_data[$form_key][$post_key] = $form_value;
}
}
}
// if id exists db->update else db->insert
foreach($position_form_data as $value){
// $value['max_vol'] = empty($value['max_vol']) ? NULL : $value['max_vol'];
// data for insert and replace db operations
$data = array(
'id' => $value['id'],
'day' => $_POST['day'],
'title' => $value['title'],
'description' => $value['description'],
'max_vol' => $value['max_vol'],
'is_draft' => $is_draft,
'project_id' => $_POST['project_id']
);
//print_r($data);exit();
if( empty($value['id']) ) {
$this->db->insert('positions', $data);
} else {
$this->db->replace('positions', $data);
}
感谢。
答案 0 :(得分:0)
我无法看到任何错误,我只能建议你试试这个:
if( ! isset($value['max_vol'])){
if( is_null($value['max_vol'])){
$_max_vol = NULL;
}
else{
$_max_vol = NULL
}
}
else{
$_max_vol = $value['max_vol'];
}
$data = array(
'id' => $value['id'],
'day' => $_POST['day'],
'title' => $value['title'],
'description' => $value['description'],
'max_vol' => $_max_vol,
'is_draft' => $is_draft,
'project_id' => $_POST['project_id']
);