Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带引号(“”)的PostgreSQL更新问题_Php_Sql_Codeigniter_Postgresql_Sql Update - Fatal编程技术网

Php 带引号(“”)的PostgreSQL更新问题

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列,否则可根据用户输入更新

我正在使用PostgreSQL和Codeigniter。数据库中有一个名为folio的表。它几乎没有包含remark1、remark2和remark3的列。第一次执行INSERT语句时,将插入所有其他列的数据

当我稍后尝试为下面的3列执行下面的UPDATE语句时,remark1列得到正确更新。但是remark2、remark3列会更新为

假设remark1、remark2、remark3列的数据类型是字符变化的。我正在使用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);

这些列会更新为,因为您让它们更新? 让我们仔细看看查询

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')
);