CI 更新批次;连接和递增变量和字符串作为数组值
Posted
技术标签:
【中文标题】CI 更新批次;连接和递增变量和字符串作为数组值【英文标题】:CI update_batch; Concatenate and increment variable and string as array value 【发布时间】:2015-10-27 06:07:34 【问题描述】:使用 CI update_batch()
,我无法设置增加整数 db 值的值。这适用于 CI set(); update()
,但批处理是更好的选择,因为有多个更新。
我的列的名称末尾都有相同的字符,开头的字符不同(不同的年份): 2014x 、 2015x 、 2016x 等。
所以我创建了一个标识年份的$var
,然后通过连接添加字符串'x' and 'y'
。最后,数组中的值设置是递增 1 所以我添加 +1 。这种连接在键中工作正常 - 也就是说我正在更新正确的列和字段。
$data = array(
array('name' => $name1,
$var.'x' => $var.'x+1'),
array('name' => $name2,
$var.'y' => $var.'y+1')
);
$this->db->update_batch('my_table', $data, 'tname');
在上述情况下,字段仅更新为 $var
的值 - 已定义的年份。
我也尝试了以下方法:
=> '"$var.x+1"' // places a '0' value in the field
=> $var.'x' +1 // places the value of $var
=> '$var.x+1' // places a '0' value in the field
如何使用update_batch()
将我的字段增加1
?
作为示例,此代码成功运行:
$this->db->where('name',$name1);
$this->db->set($var.'x',$var.'x+1',FALSE);
$this->db->update('my_table');
【问题讨论】:
这有点令人困惑。你的预期输出是什么?如果$var = 2015
你的第一个数组是:array( '2015x' => '2016x' )
?
2015x 是列。我希望 2015x 中的值增加 1,所以 2015x+1。
所以你的最终数组将是 array( '2015x' => '2015x+1' )
?那不是增量(因为您没有添加数字),这只是串联。
eval.in/411994 - 怎么了?
我已编辑问题以包含有效的更新代码。我想让它与 update_batch 一起工作
【参考方案1】:
您不能通过 update_batch 执行此操作。
在https://ellislab.com/codeigniter/user-guide/database/active_record.html的文档中是这样写的:
注意:所有值都会自动转义,从而产生更安全的查询。
重复 db->set 怎么样?例如
$this->db->where('name',$name1);
for($var = 2004; $var<2008;$var++)
$this->db->set($var.'x',$var.'x+1',FALSE);
$this->db->set($var.'y',$var.'y+1',FALSE);
$this->db->update('my_table');
【讨论】:
但是 $this->db->update 也是如此,几乎相同的语法工作 @edoras for db->update 你可以使用支持第三个参数的 db->set。但 db->update_batch 不能 所以 'FALSE' 可以防止转义? @edoras 是的。那么为什么只是简单地重复 db->set 来设置你的字段然后更新呢? 我最初是这样做的,但认为批处理成本会更低。看来我现在别无选择 - 感谢您对逃跑的澄清/教育!以上是关于CI 更新批次;连接和递增变量和字符串作为数组值的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Github Secret 作为环境变量传递给 Docker?
PyTorch DataLoader 将批次作为列表返回,批次作为唯一条目。如何从我的 DataLoader 获取张量的最佳方式