即使列设置为NULL,在MySQL中插入为零的空POST字符串

时间:2016-03-30 14:08:52

标签: codeigniter

我的问题是我的数据库列设置为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);
  }

感谢。

1 个答案:

答案 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']
  );