php - 尝试更新 codeigniter 中的多个表的语法错误
问题描述
我正在尝试更新 codeigniter 中的多个连接表,但它给出了以下错误:
错误号:1064
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '.
carro_id INNER JOIN a ON ac
.atributo_id = a
.id INNER JOIN m ON c
.`modelo_' 在第 1 行
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;
}
这是我的数据库表和关系
查询由函数生成。什么可能导致语法错误?我错过了什么吗?
解决方案
update() 方法只需要一个表名作为第一个参数,而不是一个包含连接等的完整语句。所以它将第一个参数包装成反引号。这会导致您遇到的 sql 语法错误。
更好地使用query()来生成您的(不直接的)更新语句。
推荐阅读
- android - 如何在recyclerview的顶部显示房间数据库中的最后一项
- c++ - 在 Linux 上的 gcc 中编译后更改符号和对象的可见性
- vue.js - Vue-Multi-Select 获取数据数组
- node.js - 无法通过node js发送电子邮件,尝试了几种方法
- python - python - 如何在一个参数中为python中的散射函数设置颜色和标记
- c - 任何人都可以详细解释以下c中的指针程序吗?
- php - 将字符串格式存储在db中的数据转换为对象日期时间
- apache - 导入 .war 文件时出现 Apache 错误。“错误:失败 - 无法启动上下文路径 [/文件夹] 处的应用程序”
- java - 如何转换复杂对象列表并将其表示为值 yaml 图表
- javascript - 在Javascript中使用Symbol.iterable进行迭代时如何检测当前元素是最后一个元素?