更新数据库字段错误 CodeIgniter

Posted

技术标签:

【中文标题】更新数据库字段错误 CodeIgniter【英文标题】:Update Database Field Error CodeIgniter 【发布时间】:2012-07-02 00:24:04 【问题描述】:

我在 CodeIgniter 2.1 中收到以下错误消息:

A php Error was encountered

Severity: Notice

Message: Array to string conversion

Filename: database/DB_active_rec.php

Line Number: 1407

我正在尝试更新数据库中的字段。我有这个代码,每个教程对于批量上传都是一样的。无论如何它都可以工作,但问题是它显示了这样的错误。

这是我的模型中的内容:

function update2($data)
   $this->db->update_batch('users',$data, "id");

这是我在控制器中的内容:

public function updateValues()
    $this->load->model('get_db');
    $newRow = array(
        array(
            'id' => '3',
            'firstname' => 'Rapphie'
        ),
        array(
            'id' => '2',
            'firstname' => 'Charmie'
        )
    );
    $this->get_db->update2($newRow);
    echo "it has been updated";

【问题讨论】:

您运行的是哪个版本的 CodeIgniter?您可以通过 愚蠢的问题,但是如果您在 update2() 中的 update_batch 调用上方执行 print_r 或 var_export ($data),您得到的数组是否与传入的数组相同? 你写的更新指令是错误的,你应该使用 where 条件参见文档codeigniter.com/user_guide/database/active_record.html#update 【参考方案1】:

正确的解决方案是从DB_active_rec.php 中删除第1401 - 1404 行,因为$not 变量在任何地方都没有使用。

【讨论】:

【参考方案2】:

我总是觉得这样做有点肮脏,但你也可以随时抑制那一行代码的错误!

function update2($data)
   @$this->db->update_batch('users',$data, "id");

当然,正确的做法是升级到 2.1.3(尚未测试或查看,所以我认为它已修复。)

【讨论】:

好吧,没关系。刚刚再次测试错误(不知道为什么我昨天没有看到它。)显然没有在 2.1.3 中修复。我将使用错误抑制。 ;-/【参考方案3】:

刚刚意识到使用像 M_A_K 这样的 foreach 建议实际上超出了使用 update_batch 函数的目的。这是因为通过使用 foreach,我们实际上是对每个数组元素进行单次更新(而不是批处理)。这与在 CodeIgniter 中使用(单个)更新函数没有什么不同。

【讨论】:

【参考方案4】:

在这里偶然发现了完全相同的问题。幸运的是,我使用的是相同的 CI 版本。 :)

M_A_K 的回答确实有助于删除“通知”,但我认为这不是解决问题的正确方法。所以我决定看看 DB_active_rec.php 中的 1407 行,我相信这只是 CI 2.1.2 中的一个小错误。

这是我的解决方案。我只是更改了原始代码:

$not[] = $k.'-'.$v;

进入这个:

$not[] = $k2.'-'.$v2;

瞧! “通知”不再出现。 :)

我们可以清楚地看到,第 1407 行并不是要使用 $k 和 $v,因为第 1407 行是在一个 foreach 循环中,将 $v 作为 $k2 和 $v2 迭代。

我希望我说清楚了。

【讨论】:

这仅在 2013 年 7 月 8 日发布的 CI 2.1.4 中修复,适用于仍在使用 2.1.3 并遇到此问题的任何人。 为什么不直接删除这些行呢? $not 不在任何地方使用。在下面检查我的答案。【参考方案5】:

试试这个希望它的工作

function update2($data)
   foreach($data as $string_val)
   $this->db->update_batch('users',$string_val, "id");
    

function update2($data)
   foreach($data as $string_val)
   $this->db->update_batch('users',$string_val->first_name, "id");
    

【讨论】:

以上是关于更新数据库字段错误 CodeIgniter的主要内容,如果未能解决你的问题,请参考以下文章

更新数据库中的一个 JSON 字段 - CodeIgniter

更新数据库中的表/字段 - Doctrine 2 和 Codeigniter 2

更新查询增量字段加 1 个 codeigniter 函数

某些字段的 PHP Codeigniter 批量更新失败

无法使用 Codeigniter 更新数据库中的数据

在 Codeigniter 中提交或更新任何内容后不显示更新的数据