我在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";
}
答案 0 :(得分:47)
在这里偶然发现了同样的问题。幸运的是,我使用的是相同的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。
我希望我能说清楚。
答案 1 :(得分:2)
刚刚意识到使用foreach 就像M_A_K建议实际上击败了使用update_batch函数的目的。这是因为通过使用foreach,我们实际上是为每个数组元素进行单个更新(而不是批处理)。这与使用CodeIgniter中的(单个)更新功能没什么不同。
答案 2 :(得分:0)
我总是觉得这样做有点脏,但你也总是可以为这一行代码抑制错误!
function update2($data){
@$this->db->update_batch('users',$data, "id");
}
当然,正确的做法是升级到2.1.3(尚未经过测试或看过,所以我认为它已经修好了。)
答案 3 :(得分:0)
正确的解决方案是从DB_active_rec.php删除第1401-1404行,因为$not
变量未在任何地方使用。
答案 4 :(得分:-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");
}
}