2013-06-26 93 views
1

我有一種情況,我必須以編程方式執行數據庫插入。我有多個表,但這些表的信息順序是相似的,即在每個表中,id中的第一個coulmn,第二個是foregin關鍵字,第三個是名稱,第四個是blob,第五個是文本。通過數組索引訪問對象的屬性

我搜索了php doc,發現我可以使用$ objectName [index]來訪問數據庫屬性。我得到錯誤

Cannot use object of type stdClass as array in C:\....php on line ..

錯誤線被指示在代碼

private function uploadTemp($databaseObject, $table_name){ 
    $this->load->database(); 
    //get file_contents too; 
    $file_id = $databaseObject[3]; // < Here's where the error appeared 
    $this->db->from('tbl_file')->where('file_id',$file_id); 
    $q = $this->db->get(); 
    $data = $q->row(); 
    $query = "INSERT INTO $table_name VALUES(NULL, '".$databaseObject[2]."','".$data->filecontent."');"; 
    $this->db->query($query); 
} 

我使用笨作爲一個框架。

+0

這不就是一個標前行即'$ file_id = $ databaseObject [3];'觸發錯誤? – VolkerK

+0

@ VolkerK第二行觸發了!這讓人感到驚訝! – cipher

回答

3

嘗試鑄造陣列:

$file_id = (array) $databaseObject[3]; 

作爲一個StdClass只是與public dynamic variablesno methods一個虛擬容器,應該有它鑄造於數組沒有問題,向後爲好。

但是在某些情況下,數字用於表示變量名稱。

例子:

$array ; //Is some array created by engines/database handlers. 

$obj = (object) $array ; 

echo $obj->0 ; //Hell it will not work. 
echo $obj[0] ; //The same problem. 

echo $obj->{'0'} ; //PERFECT 
+0

將錯誤轉移一行以上 – cipher

+0

現在說什麼? – vikingmaster

+0

同樣的錯誤。只是錯誤的行轉移到'$ file_id = .....' – cipher

1

試試這個功能get_object_vars()

或創建函數將轉換爲數組

function array_to_object($array)//from CodeIgniter forum 
{ 
    return (is_array($array)) ? (object) array_map(__FUNCTION__, $array) : $array; 
} 
+0

感謝您的幫助 – cipher

+0

@cipher歡迎您.. –