2013-12-08 136 views
1

我發現一些問題與此問題相同,但我似乎無法爲自己的代碼找到正確的答案。所以我會發布我的問題。如何使用代碼選擇活動記錄插入記錄

我的代碼不工作,併發布錯誤。像「stdClass無法轉換爲字符串」或有關數組的問題。

這裏是我的模型代碼

$this->db->select("*"); 
$this->db->from("table1"); 
$query = $this->db->get(); 
$this->db->insert("table2", $query->result()); 

這是行不通的。

現在當我使用print_r($查詢)結果是這樣的。

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

如果在第3行和第4行之間添加'echo $ query;'和'print_r($ query)',會發生什麼? – brandonscript

+0

對不起,最近的回覆@ r3mus我已經更新了我的帖子 – Vincent

回答

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()); 
} 
+0

insert_batch工作!謝謝:) – Vincent

2

我懷疑$query作爲一個對象回來了。

請嘗試以下方法之一,在地方你的最後一行與$query->result()

$this->db->insert("table2", $query->row()); 
//or 
$this->db->insert("table2", $query->result_array()); 
+1

你是正確的對象。 :( – Vincent

2

如果你想要實現的是兩個表之間的數據複製,你應該嘗試此查詢

INSERT INTO to_table (field1,field2) (SELECT field1,field2 FROM from_table); 

這是更在很多方面都有效率。 它在單個查詢中生成結果。 沒有數據進入或從應用程序發送,從而帶來巨大的速度收益。

+1

他問的活動記錄 –

+1

我明白,@MoeedFarooqui。我只是給他另一種方法,以更有效的方式完成工作。 – ultimate

+0

但這種方式他太接近Sql注入 –