You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 3含空格数据库及字段无法插入数据问题排查

问题:向含空格的MySQL表/字段插入数据时触发1064语法错误

我按公司规定,向名称包含空格的数据库表及字段插入数据,出现如下错误:

错误代码:1064 您的SQL语法有误;请查阅对应MySQL服务器版本的手册,查看在‘harian_copy1 (RecID, id_peminjaman, Tanggal, Cabang, Jenis Proyek,’附近使用的正确语法。

控制器代码

public function inputalokasiharian() {
// Ambil data dari form atau sumber lainnya
    
    $RecID = $this->input->post('RecID');
    $id_peminjaman = $this->input->post('id_peminjaman');
    $Tanggal = $this->input->post('Tanggal');
    $Cabang = $this->input->post('Cabang');
    $Jenis_Proyek = $this->input->post('Jenis Proyek');
    $Nama_Proyek = $this->input->post('Nama Proyek');
    $Kode_Proyek = $this->input->post('Kode Proyek');
    $Jenis_Alokasi = $this->input->post('Jenis Alokasi');
    $Nama_Alokasi = $this->input->post('Nama Alokasi');
    $Jenis_Pekerjaan = $this->input->post('Jenis Pekerjaan');
    $keterangan = $this->input->post('keterangan');
    $persentase_hasil = $this->input->post('persentase_hasil');
    $jam_mulai = $this->input->post('jam_mulai');
    $jam_selesai = $this->input->post('jam_selesai');
    $ketercapaian = $this->input->post('ketercapaian');
    $bagian = $this->input->post('bagian');
    

    $data = array(
        'RecID' => $RecID,
        'id_peminjaman' => $id_peminjaman,
        'Tanggal' => $Tanggal,
        'Cabang' => $Cabang,
        'Jenis Proyek' => $Jenis_Proyek,
        'Nama Proyek' => $Nama_Proyek,
        'Kode Proyek' => $Kode_Proyek,
        'Jenis Alokasi' => $Jenis_Alokasi,
        'Nama Alokasi' => $Nama_Alokasi,
        'Jenis Pekerjaan' => $Jenis_Pekerjaan,
        'keterangan' => $keterangan,
        'persentase_hasil' => $persentase_hasil,
        'jam_mulai' => $jam_mulai,
        'jam_selesai' => $jam_selesai,
        'ketercapaian' => $ketercapaian,
        'bagian' => $bagian
    );

    $this->region_model->insertalokasiharian($data);
    $this->session->set_flashdata('message_input_ah','<div class="alert alert-success alert-dismissible mt-1 fade show" role="alert">Data alokasi harian berhasil dimasukkan
                                                          <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                                              <span aria-hidden="true">&times;</span>
                                                          </button>
                                                     </div>');
    redirect($_SERVER['HTTP_REFERER']);
}

模型代码

public function insertalokasiharian($data) {
    $DB2 = $this->load->database('old_db', TRUE);
    return $DB2->insert('`ga - alokasi harian_copy1`', $data);
}

解决方案

错误核心:MySQL要求**包含空格、特殊字符的表名/字段名必须用反引号()包裹**,但CodeIgniter的insert()方法默认不会给字段名自动添加反引号,导致Jenis Proyek`这类带空格的字段被拆成两个独立标识符,触发语法错误。

方法1:给数据数组的字段名手动加反引号

直接修改控制器中的$data数组,给所有带空格的字段名包裹反引号:

$data = array(
    'RecID' => $RecID,
    'id_peminjaman' => $id_peminjaman,
    'Tanggal' => $Tanggal,
    'Cabang' => $Cabang,
    '`Jenis Proyek`' => $Jenis_Proyek,
    '`Nama Proyek`' => $Nama_Proyek,
    '`Kode Proyek`' => $Kode_Proyek,
    '`Jenis Alokasi`' => $Jenis_Alokasi,
    '`Nama Alokasi`' => $Nama_Alokasi,
    '`Jenis Pekerjaan`' => $Jenis_Pekerjaan,
    'keterangan' => $keterangan,
    'persentase_hasil' => $persentase_hasil,
    'jam_mulai' => $jam_mulai,
    'jam_selesai' => $jam_selesai,
    'ketercapaian' => $ketercapaian,
    'bagian' => $bagian
);

模型代码无需修改,表名已经正确用反引号包裹。

方法2:手动构造带参数绑定的INSERT语句

如果不想修改控制器,可在模型中手动编写SQL,确保所有标识符都带反引号,同时用参数绑定避免注入:

public function insertalokasiharian($data) {
    $DB2 = $this->load->database('old_db', TRUE);
    
    $sql = "INSERT INTO `ga - alokasi harian_copy1` 
            (`RecID`, `id_peminjaman`, `Tanggal`, `Cabang`, `Jenis Proyek`, `Nama Proyek`, 
             `Kode Proyek`, `Jenis Alokasi`, `Nama Alokasi`, `Jenis Pekerjaan`, `keterangan`, 
             `persentase_hasil`, `jam_mulai`, `jam_selesai`, `ketercapaian`, `bagian`)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    
    $params = array(
        $data['RecID'], $data['id_peminjaman'], $data['Tanggal'], $data['Cabang'],
        $data['Jenis Proyek'], $data['Nama Proyek'], $data['Kode Proyek'], $data['Jenis Alokasi'],
        $data['Nama Alokasi'], $data['Jenis Pekerjaan'], $data['keterangan'], $data['persentase_hasil'],
        $data['jam_mulai'], $data['jam_selesai'], $data['ketercapaian'], $data['bagian']
    );
    
    return $DB2->query($sql, $params);
}

内容的提问来源于stack exchange,提问作者IMAM IHSANI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:54:57