如何使用代码点火器中的选择活动记录插入记录


How to insert records using select active records in codeigniter

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

我的代码不起作用,并且发布了错误。比如"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);

这在很多方面都更有效。它在单个查询中生成结果。没有任何数据被带入或从应用程序发送,从而带来巨大的速度优势。