我发现了一些与此问题相同的问题,但我似乎无法为自己的代码找到正确的答案。所以我要发布我的问题。
我的代码不起作用,并且发布了错误。比如"stdClass无法转换为字符串"或与数组有关的问题。
这是型号的代码
$this->db->select("*");
$this->db->from("table1");
$query = $this->db->get();
$this->db->insert("table2", $query->result());
这不起作用。
现在,当我使用printr($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] => )
试试这个:
如果使用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());
}
我怀疑$query
将作为对象返回。
尝试以下操作之一,代替$query->result()
的最后一行:
$this->db->insert("table2", $query->row());
//or
$this->db->insert("table2", $query->result_array());
如果您只想在两个表之间复制数据,则应该尝试以下查询
INSERT INTO to_table (field1,field2) (SELECT field1,field2 FROM from_table);
这在很多方面都更有效。它在单个查询中生成结果。没有任何数据被带入或从应用程序发送,从而带来巨大的速度优势。