报价的PostgreSQL更新问题('')

时间:2013-10-15 12:21:44

标签: php sql codeigniter postgresql sql-update

我正在使用PostgreSQL&笨。数据库中有一个名为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);

1 个答案:

答案 0 :(得分:1)

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

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

首先,您选择表格folio进行更新 然后,您告诉它使用新值更新remarks1remarks3。对于remarks2remarks3,您指定将它们设置为空字符串。这就是将要发生的事情 最后但同样重要的是,您告诉它仅将此更新应用于id等于51的行。

因此,为了更新remarks1,您只需从更新中删除其他列:

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

<强>更新
我到目前为止还不是CI专家,但从我看到的情况来看,我将$data数组更改为仅包含remark1的信息:

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

并且(根据我的理解)它应该只更新这一列。