数据库批量更新问题
$this->db->update_batch会导致下面这个问题啊————————————————————
A PHP Error was encounteredSeverity: Notice
Message: Array to string conversion
Filename: database/DB_active_rec.php
Line Number: 1407
—————————————————————
有谁碰到过没,这应该是个BUG吧
Message: Array to string conversion
你是不是把只能接受字符串的字段弄成数组了?
你发下你传递的值吧。 Filename: database/DB_active_rec.php
Line Number: 1407
$not[] = $k.'-'.$v;
$v就是个数组
而且$not 这个变量在这个函数中 根本就没用到。。 我也遇到了这个问题,我仔细研究了源码,首先,同意楼上“游走的鱼”的说法,$not在代码中最后没有用到。但是我认为,源码作者的意图可能是这样子的。
1、$not[] 数组回收了(ci中认为的)传入参数中格式错误的内容,但是它仅仅是回收了该“错误”,并没有进行后续处理。
2、按照ci官方手册 http://codeigniter.org.cn/user_guide/database/active_record.html 的说明,传入的参数$key 应该最多是哥二维数组,那么也就是说,当执行到 foreach ($v as $k2 => $v2) { } 时,$vj就是最底层的真实数据,$k2 和 $v2 这个时候已经是字符串了,当然也可能是整形之类的。(PHP的弱类型,我们其实不关心这些了。总之,可以将其作为合法字符串。)
拿官方的例子来说,
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name 2' ,
'date' => 'My date 2'
),
array(
'title' => 'Another title' ,
'name' => 'Another Name 2' ,
'date' => 'Another date 2'
)
);
$this->db->update_batch('mytable', $data, 'title');
这里边,其实 $v 在一次循环中,就可以是
array(
'title' => 'Another title' ,
'name' => 'Another Name 2' ,
'date' => 'Another date 2'
)
,而 $k2 => $v2 就可以是'title' => 'Another title' ,而源码作者想保存下来的$not 数组,最终应该是
array(
0 =>'title-Another title' ,
1 => 'name-Another Name 2' ,
2 => 'date-Another date 2'
)
3、$not[] = $k.'-'.$v; 我认为是源码作者的错误,应该改为 $not[] = $k2.'-'.$v2;
public function set_update_batch($key, $index = '', $escape = TRUE)
{
$key = $this->_object_to_array_batch($key);
if ( ! is_array($key))
{
// @todo error
}
foreach ($key as $k => $v)
{
$index_set = FALSE;
$clean = array();
foreach ($v as $k2 => $v2)
{
if ($k2 == $index)
{
$index_set = TRUE;
}
else
{
// $not[] = $k.'-'.$v;//ci源代码中是这一句,denniszhu认为它本身就有误,应该是 $not[] = $k2.'-'.$v2
$not[] = $k2.'-'.$v2;//我修改源码后得到的内容
}
if ($escape === FALSE)
{
$clean[$this->_protect_identifiers($k2)] = $v2;
}
else
{
$clean[$this->_protect_identifiers($k2)] = $this->escape($v2);
}
}
if ($index_set == FALSE)
{
return $this->display_error('db_batch_missing_index');
}
$this->ar_set[] = $clean;
}
return $this;
} 子木小乔 发表于 2013-3-28 16:50 static/image/common/back.gif
我也遇到了这个问题,我仔细研究了源码,首先,同意楼上“游走的鱼”的说法,$not在代码中最后没有用到。但 ...
我也认为是这边代码有误 这不是Bug,是你程序问题
页:
[1]