【问题标题】:Syntax error trying to update multiple tables in codeigniter尝试更新 codeigniter 中的多个表的语法错误
【发布时间】:2018-12-09 21:33:44
【问题描述】:

我正在尝试更新 codeigniter 中的多个连接表,但它给出了以下错误:

错误号:1064

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 第 1 行的 '.carro_id INNER JOIN a ON ac.atributo_id = a.id INNER JOIN m ON c.`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;
}

这是我的数据库表和关系

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

【问题讨论】:

  • 这些反引号 ` 真的出现在您的更新语句中吗?
  • $query = .... 的语法似乎不正确。我想(不知道codeigniter)它可能类似于$query = $this->db->set('marcas.marca', $data['marca'])->set('modelos.modelo', $data['modelo'])->....
  • @Jeff 更新语句由函数生成,在 $this->db->update... 部分。
  • 我认为你最好通过query()构建你的(不简单的)查询
  • @Jeff 我使用了您关于构建查询的建议,并且成功了,谢谢。

标签: php mysql codeigniter-3


【解决方案1】:

update() method 只需要一个表名作为第一个参数,而不是一个完整的语句,包括连接等。所以它将第一个参数包装成反引号。这会导致您遇到的 sql 语法错误。

最好使用query() 来生成您的(不直接的)更新声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多