我有一种情况,我必须以编程方式进行数据库插入。我有多个表,但这些表的信息顺序是相似的,即在每个表中,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);
}
我使用CodeIgniter作为框架。
答案 0 :(得分:3)
尝试转换为数组:
$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
答案 1 :(得分:1)
尝试此功能get_object_vars()
或创建转换为数组的函数
function array_to_object($array)//from CodeIgniter forum
{
return (is_array($array)) ? (object) array_map(__FUNCTION__, $array) : $array;
}