2013-10-15 30 views
0

我正在使用PostgreSQL & Codeigniter。数据库中有一张名为folio的表格。它有几列也包含remarks1, remarks2, remarks3。当INSERT语句第一次执行时插入所有其他列的数据。PostgresSQL更新问题与报价('')

当我尝试执行下面的UPDATE语句后面的3列以下时,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); 
+0

UPDATE“folio”SET“remarks1”='test remark',“remarks2”='moreinfo','remarks3'='minfopart2'WHERE“id”='51'; ??? – Hackerman

+0

'WHERE“id”='51';''是'id' char或varchar列?当不是:删除引号:'WHERE“Id”= 51'(顺便说一句:你以前曾经接触过mysql吗?) – joop

+0

它是由CI生成的:-( – Techie

回答

1

那些列与''更新?
让我们来仔细看看查询

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

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

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

更新:
我远远不是CI专家

因此,为了更新remarks1你可以简单地从您的更新移除其他列,但从我看到的,我会改变$data阵列,只包含remark1信息:

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

(从我的理解),它应该只更新这一列。

+1

)为什么它像MySQL那样空白更新? '不添加''这是由Codeigniter完成 – Techie

+0

@Dasun大多数SQL兼容的数据库系统会设置一个值给emptystring,如果你告诉他们。这是常见和预期的行为。但我不知道如何告诉codeigniter只更新一列。 –

+3

@Dasun - 如果您需要CodeIgniter代码的帮助,您需要展示一些代码。您发布了SQL,这是人们为您提供的帮助。 –