尝试更新codeigniter中的多个表时出现语法错误

t9eec4r0  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(218)

我正在尝试更新codeigniter中的多个联接表,但出现以下错误:
错误号:1064
sql语法有错误;检查与mysql服务器版本相对应的手册,以获得使用near'的正确语法。 carro_id INNER JOIN a ON ac . atributo_id = a . id INNER JOIN m ON c 第1行的“modelo”

UPDATE `carro c, atributo_carro ac, atributos a, modelos m, marcas ma
INNER JOIN ac ON c`.`id = ac`.`carro_id INNER JOIN a ON
ac`.`atributo_id = a`.`id INNER JOIN m ON c`.`modelo_id = m`.`id INNER
JOIN ma ON m`.`marca_id =` `ma`.`id` SET `marcas`.`marca` = 'Opel',
`modelos`.`modelo` = 'AMmmmmm', `carro`.`kilometragem` = '12000',
`carro`.`cor` = 'Azul', `carro`.`ano` = '1992', `carro`.`descricao` =
'dfghjk', `carro`.`valor` = '1288.00', `atributos`.`atributo` =
'rapido' WHERE `carro`.`id` = '10'

这是我要更新的函数。

public function update_carro_query($id, $data)
{
    // print_r($data); die();
    $query =
    $this->db->set('marcas.marca', $data['marca']);
    $this->db->set('modelos.modelo', $data['modelo']);
    $this->db->set('carro.kilometragem', $data['kilometragem']);
    $this->db->set('carro.cor', $data['cor']);
    $this->db->set('carro.ano', $data['ano']);
    $this->db->set('carro.descricao', $data['descricao']);
    $this->db->set('carro.valor', $data['valor']);
    $this->db->set('atributos.atributo', $data['atributo']);
    $this->db->where('carro.id', $id);
    $this->db->update('carro c, atributo_carro ac, atributos a, modelos m, marcas ma INNER JOIN ac ON c.id = ac.carro_id INNER JOIN a ON ac.atributo_id = a.id INNER JOIN m ON c.modelo_id = m.id INNER JOIN ma ON m.marca_id = ma.id');
    return $query;
}

这是我的数据库表和关系

查询由函数生成。什么会导致语法错误?我错过什么了吗?

bakd9h0s

bakd9h0s1#

update()方法只需要一个表名作为第一个参数,而不是一个包含join等的完整语句。所以它会将第一个参数 Package 到backticks中。这将导致sql语法错误。
最好使用query()来生成(不是简单的)update语句。

相关问题