如何在codeigniter驱动的mysql表中清空和插入数据

aamkag61  于 2023-02-21  发布在  Mysql
关注(0)|答案(1)|浏览(180)

目前的代码从csv文件中获取数据,并将其导入相关的mysql表。有几个表。它插入数据,如果表是空的。如果数据已经存在,它更新它。我有一个特定的数据库中的表,必须清空每一次插入或更新数据到它。我无法实现它。这是原始代码。

This is the original code.

        $records = $this->csvimport->parse_csv($this->directory . $file);

        foreach ($records as $row) {
            $data = $this->$function($row);
            
            $data = $this->correct_date_format($data);
            
            foreach ($this->$condition($data) as $column) {
                $this->db->where($column, $data[$column]);
            }

            if ($this->db->get($table, 1)->num_rows() > 0) {
                foreach ($this->$condition($data) as $column) {
                    $this->db->where($column, $data[$column]);
                }

                $this->db->update($table, $data);

            } else {
                $this->db->insert($table, $data);
            }
        }
        echo json_encode(['Last_record' => $this->db->where('date', $data['date'])->get($table)->result_array()]);

表名是gap_up。下面是我所做的代码更改。但它并不像我预期的那样工作。它只是删除表内容,但没有插入新数据。

$records = $this->csvimport->parse_csv($this->directory . $file);

        foreach ($records as $row) {
            $data = $this->$function($row);
            
            $data = $this->correct_date_format($data);
            
            foreach ($this->$condition($data) as $column) {
                $this->db->where($column, $data[$column]);
            }

            if ($this->db->get($table, 1)->num_rows() > 0) {
                foreach ($this->$condition($data) as $column) {
                    $this->db->where($column, $data[$column]);
                }
                $this->db->empty_table('gap_up');
                $this->db->insert(gap_up, $data);
                $this->db->update($table, $data);

            } else {
                $this->db->insert($table, $data);
            }
        }
        echo json_encode(['Last_record' => $this->db->where('date', $data['date'])->get($table)->result_array()]);
8ehkhllq

8ehkhllq1#

当CI_DB_query_builder::insert()在内部调用CI_DB_query_builder::_reset_write()时,您需要在insert()调用后设置更新的where条件:

if ($this->db->get($table, 1)->num_rows() > 0) {

    $this->db->empty_table('gap_up');
    $this->db->insert('gap_up', $data);

    foreach ($this->$condition($data) as $column) {
        $this->db->where($column, $data[$column]);
    }
    $this->db->update($table, $data);

} else {
    $this->db->insert($table, $data);
}

这仍然意味着gap_up表将只包含一行,因为在插入每一行之前您将删除所有内容。
这个“有意”的更新是没有意义的,因为它只会运行UPDATE $table SET col1 = 'val1', col2 = 'val2' WHERE col1 = 'val1' AND col2 = 'val2';,没有任何影响。尽管如此,我可能是错的,因为我们看不到你的变量方法$this->$condition()是什么和/或做什么。它排除了一些列吗?

相关问题