2011-02-25 6 views
1

CodeIgniter 1.7.3, Datamapper DMZ 1.7.1 (및 업그레이드 할 수 없음), MySQL 5.1 및 응용 프로그램에 대한 Cron Job Boostrapper을 실행하고 있습니다. 건물. XML 파일에서 정보를 추출하여 데이터베이스에 저장하려고합니다. 데이터를 가져 오는 것은 데이터베이스에서 데이터를 가져 오는 것과 마찬가지로 잘 작동하므로 데이터베이스 연결이나 XML 파일에 문제가 없다는 것을 알고 있습니다.Codeigniter Datamapper save()가 실제로 데이터베이스에 저장되지 않음

$this->site = $this->site->get_by_short_name('site'); 

//Load the XML files into variables so we can do stuff with them. 
$doctors = simplexml_load_file(realpath('../xml/doctors.xml')); 

foreach ($doctors->children() as $doctor) { 
    $dr = new Doctor(); 
    $attrs = $doctor->attributes(); 
    /* See if the Doctor already exists. If so, update it. 
    * Datamapper won't update fields that don't change, so if nothing's 
    * changed, then the DB call won't be made. 
    */ 
    $dr->get_by_drkey($attrs['Key']); 
    $dr->drkey = $attrs['Key']; 
    $dr->first_name = $doctor->FirstName; 
    $dr->middle_name = $doctor->MiddleName; 
    $dr->last_name = $doctor->LastName; 
    $dr->long_name = $doctor->LongName; 
    $dr->degrees = $doctor->Degrees; 
    $dr->pic = $doctor->ImageURL; 
    $dr->save($this->site); 
} 

나는 $dr->save($this->site)의 반환 값을 확인했고이 같은 사실 ("성공적으로 저장") 돌아오고 있지만, 데이터는 저장되지 않으며, 오류가 없습니다. 관계없이 (데이터베이스의 요구 사항을 제거한) 시도 했으므로 오류없이 저장해야하지만 여전히 저장하지 않습니다. 또한 모델의 관계 설정을 두 번 확인해도 괜찮습니다.

또한 Datamapper를 우회하고 데이터를 배열로 변환하여 똑바로 $this->db->insert('doctors',$data)을 시도했지만 데이터는 저장되지 않습니다. 나는 또한 부트 스트 래퍼를 우회하여 브라우저에서 실행하여 문제가 커맨드 라인에서 실행하는 것과 관련이 있는지 알아 보았지만 역시 작동하지 않았다. 부트 스트 래퍼의 알려진 문제점이 트리거되지 않도록 모든 세션 또는 인증 라이브러리를 자동 로딩하지 않습니다.

왜 이것이 작동하지 않는지에 대한 통찰력이 있습니까?

답변

0

나는 무슨 일이 일어나고 있는지 발견했습니다. SimpleXML 개체 (개별 레코드)의 특성이 Datamapper에 의해 문자열로 선택되지 않았으므로 이스케이프 처리되지 않고 MySQL이 질식했습니다. 모델 객체의 값 ($dr->first_name = (string)$doctor->First_Name;)을 설정할 때이를 형변환하면이 문제가 해결됩니다.

개체가 저장하려고 시도한 후에 $dr->check_last_query()을 통해 삽입 쿼리를 가져올 수있었습니다.

관련 문제