Php 带引号(“”)的PostgreSQL更新问题
我正在使用PostgreSQL和Codeigniter。数据库中有一个名为folio的表。它几乎没有包含remark1、remark2和remark3的列。第一次执行INSERT语句时,将插入所有其他列的数据 当我稍后尝试为下面的3列执行下面的UPDATE语句时,remark1列得到正确更新。但是remark2、remark3列会更新为 假设remark1、remark2、remark3列的数据类型是字符变化的。我正在使用Codeigniter活动记录。一次可更新所有3列,否则可根据用户输入更新单个列 可能是什么问题?我怎样才能解决这个问题?为什么列更新为 根据要求,CI中的php数组如下所示Php 带引号(“”)的PostgreSQL更新问题,php,sql,codeigniter,postgresql,sql-update,Php,Sql,Codeigniter,Postgresql,Sql Update,我正在使用PostgreSQL和Codeigniter。数据库中有一个名为folio的表。它几乎没有包含remark1、remark2和remark3的列。第一次执行INSERT语句时,将插入所有其他列的数据 当我稍后尝试为下面的3列执行下面的UPDATE语句时,remark1列得到正确更新。但是remark2、remark3列会更新为 假设remark1、remark2、remark3列的数据类型是字符变化的。我正在使用Codeigniter活动记录。一次可更新所有3列,否则可根据用户输入更新
$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);
这些列会更新为,因为您让它们更新? 让我们仔细看看查询
UPDATE "folio"
SET
"remarks1" = 'test remark',
"remarks2" = '',
"remarks3" = ''
WHERE
"id" = '51';
首先,选择要更新的表对开本。
然后告诉它用新值更新remark1到remark3。对于remark2和remark3,可以指定将其设置为空字符串。这就是将要发生的事情。
最后但并非最不重要的一点是,您告诉它仅将此更新应用于id等于51的行
因此,为了只更新remark1,您只需从更新中删除其他列:
UPDATE "folio"
SET
"remarks1" = 'test remark'
WHERE
"id" = '51';
更新:
到目前为止,我还不是CI专家,但据我所见,我将$data数组更改为仅包含remark1的信息:
根据我的理解,它应该只更新这一列。更新对开本集remarks 1='test remarks',remarks 2='moreinfo',remarks 3='minfopart2',其中id='51';?`其中id='51';`id是char还是varchar列?当没有:删除引号:WHERE Id=51顺便问一下:你前世是否接触过mysql?它是由CI生成的:-为什么它会像mysql一样用blank更新?我没有在这里加上。这是由Codeigniter完成的。@Dasun大多数符合SQL的数据库系统都会设置一个值为emptystring,如果您告诉他们的话。这是常见的和预期的行为。但是我不知道如何告诉codeigniter只更新一列。@Dasun-如果您需要codeigniter代码的帮助,您需要展示其中的一些。你发布了SQL,这就是人们帮助你的地方。请查看更新的问题并告诉我我去了哪里wrong@Dasun我更新了我的答案,对CI问题有所了解。
UPDATE "folio"
SET
"remarks1" = 'test remark'
WHERE
"id" = '51';
$data = array(
'remark1' => $this->input->post('remark1')
);