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?

做一个递增的数组,同时修改数组

如何在Acumatica报告变量中隐瞒字符串

PyTorch DataLoader 将批次作为列表返回,批次作为唯一条目。如何从我的 DataLoader 获取张量的最佳方式

PHP数组

如何将 id 数组作为字符串连接和查询到另一个表中?