2011-02-25 136 views
1

我为应用程序运行CodeIgniter 1.7.3,Datamapper DMZ 1.7.1(和不,升级不是选项),MySQL 5.1和Cron Job Boostrapper建造。我试图从XML文件中提取信息并将其保存到数据库中。从数据库获取数据,获取数据工作得很好,因此我知道这不是数据库连接问题,也不是XML文件。Codeigniter Datamapper保存()实际上并没有保存到数据库

$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()获得插入查询。