2013-06-26 2 views
1

У меня есть ситуация, когда я должен программно делать вставки базы данных. У меня есть несколько таблиц, но порядок информации этих таблиц аналогичен, т. Е. В каждой таблице первый coulmn в id, а второй - ключ перед началом, а третий - это имя, а четвертый - 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); 
} 

Я использую CodeIgniter в качестве основы.

+0

Разве это линия перед исполнился, то есть '$ file_id = $ databaseObject [3]; 'который вызывает ошибку? – VolkerK

+0

@VolkerK Вторая линия вызвала это! Это было удивительно! – cipher

ответ

3

Try литье в массив:

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

Как StdClass просто манекен контейнер с public dynamic variables и no 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 вы приветствуете .. –