如何使用codeigniter中的选择活动记录插入记录

时间:2013-12-08 07:56:51

标签: php codeigniter

我发现了一些与此问题相同的问题,但我似乎无法为自己的代码找到合适的答案。所以我要发布我的问题。

我的代码无效并发布错误。像“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] => )

3 个答案:

答案 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);

这在很多方面都更有效率。 它在单个查询中生成结果。 没有数据从应用程序进入或发送,从而产生巨大的速度效益。