0

我正在使用 PostgreSQL 和 Codeigniter。数据库中有一个名为 folio 的表。它也包含很少的列remarks1, remarks2, remarks3。当第一次执行 INSERT 语句时,将插入所有其他列的数据。

当我稍后尝试对以下 3 列执行下面的 UPDATE 语句时,remarks1列得到正确更新。但remarks2, remarks3列更新为''.

UPDATE "folio" SET "remarks1" = 'test remark', "remarks2" = '', "remarks3" = '' WHERE "id" = '51';

鉴于remarks1, remarks2, remarks3列数据类型是character varying. 我正在使用 Codeigniter 活动记录。一次可以更新所有 3 列,否则可以根据用户输入更新单个列。

可能是什么问题?我怎样才能解决这个问题?为什么列更新为''

根据要求,CI中的php数组将在下面

$data     = array(
     'remark1' => $this->input->post('remark1'),
     'remark2' => $this->input->post('remark1'),
     'remark3' => $this->input->post('remark1')
);

保存数据的函数仅包含以下两行

$this->db->where('id', $folio_id);
$this->db->update('folio', $data);
4

1 回答 1

1

这些列是''因为您告诉他们而更新的?
让我们仔细看看查询

UPDATE "folio"
SET
    "remarks1" = 'test remark',
    "remarks2" = '',
    "remarks3" = ''
WHERE
    "id" = '51';

首先选择folio要更新的表。
然后你告诉它用新值更新remarks1remarks3Forremarks2并且remarks3您指定将它们设置为空字符串。这就是将要发生的事情。
最后但并非最不重要的一点是,您告诉它仅将此更新应用于idequals的行51

因此,为了更新remarks1,您可以简单地从更新中删除其他列:

UPDATE "folio"
SET
    "remarks1" = 'test remark'
WHERE
    "id" = '51';

更新:
到目前为止,我还不是 CI 专家,但据我所知,我会将$data数组更改为仅包含以下信息remark1

$data     = array(
     'remark1' => $this->input->post('remark1')
);

而且(据我了解)它应该只更新这一列。

于 2013-10-15T12:28:45.453 回答