我发现了一些与此问题相同的问题,但我似乎无法为自己的代码找到合适的答案。所以我要发布我的问题。
我的代码无效并发布错误。像“stdClass无法转换为字符串”或有关数组的问题。
这是我在模型中的代码
$this->db->select("*");
$this->db->from("table1");
$query = $this->db->get();
$this->db->insert("table2", $query->result());
这不起作用。
现在当我使用print_r($ query)时,结果就是这样。
CI_DB_mysql_result Object ( [conn_id] => Resource id #30 [result_id] => Resource id #40 [result_array] => Array ( ) [result_object] => Array ( ) [custom_result_object] => Array ( ) [current_row] => 0 [num_rows] => 5 [row_data] => )
答案 0 :(得分:2)
我怀疑$query
作为对象回来了。
尝试执行以下操作之一,代替$query->result()
的最后一行:
$this->db->insert("table2", $query->row());
//or
$this->db->insert("table2", $query->result_array());
答案 1 :(得分:2)
试试这个:
如果您select('*')
它将返回许多行,因此不建议使用insert()
由于insert
只会处理ONE ROW
尝试使用insert_batch()
$this->db->insert_batch("table2", $query->result());
//or
$this->db->insert_batch("table2", $query->result_array());
如果您需要使用insert()
,则必须在第一次查询中添加limit(1)
。
或者如果它返回多行,你必须抓住你的查询
$numrows = $query->num_rows();
if($numrows == 1)
{
$this->db->insert("table2", $query->row());
}elseif($numrows > 1){
$this->db->insert_batch("table2", $query->result_array());
}
答案 2 :(得分:2)
如果你想要实现的只是在两个表之间复制数据,你应该尝试这个查询
INSERT INTO to_table (field1,field2) (SELECT field1,field2 FROM from_table);
这在很多方面都更有效率。 它在单个查询中生成结果。 没有数据从应用程序进入或发送,从而产生巨大的速度效益。