13

CodeIgniter2.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";
}
4

5 に答える 5

47

ここでまったく同じ問題に遭遇しました。幸い、私は同じCIバージョンを使用しています。:)

M_A_Kからの回答が「通知」の削除に役立つことは事実ですが、それが問題の正しい解決策ではないと思います。そこで、DB_active_rec.phpの1407行を確認することにしました。これは、CI2.1.2のマイナーなバグにすぎないと思います。

これが私の修正です。元のコードを変更しただけです。

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

これに:

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

出来上がり!「お知らせ」は表示されなくなりました。:)

行1407は$vを$k2および$v2として繰り返すforeachループ内にあるため、行1407が$kおよび$vを使用することを意図していないことがはっきりとわかります。

私は自分自身を明確にしていることを願っています。

于 2012-10-16T08:00:44.140 に答える
2

提案されたM_A_Kのようなforeachを使用すると、実際にはupdate_batch関数を使用する目的よりも優れていることに気づきました。これは、foreachを使用することで、実際には配列要素ごとに(バッチではなく)単一の更新を実行しているためです。これは、CodeIgniterの(単一の)更新関数を使用するのと同じです。

于 2012-10-29T03:00:31.370 に答える
0

私はいつもこれを行うのに少し汚い気がしますが、あなたはいつでもその1行のコードのエラーを抑えることができます!

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

もちろん、適切な方法は2.1.3にアップグレードすることです(テストも確認もされていないため、修正されたと思います)。

于 2013-01-08T23:51:58.987 に答える
0

正しい解決策は、変数がどこにも使用されていないため、DB_active_rec.phpから行1401〜1404を削除することです。$not

于 2017-09-18T02:19:36.820 に答える
-2

この希望を試してみてください

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");
    }
}
于 2012-07-02T12:39:59.350 に答える