【问题标题】:Update Database Field Error CodeIgniter更新数据库字段错误 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

标签: php mysql codeigniter codeigniter-2


【解决方案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");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多