Codeigniter Datamapper save()实际上并没有保存到数据库

时间:2011-02-25 19:41:11

标签: php mysql codeigniter codeigniter-datamapper

我正在运行CodeIgniter 1.7.3,Datamapper DMZ 1.7.1(并且没有,升级不是一个选项),MySQL 5.1和我正在构建的应用程序的Cron Job Boostrapper。我正在尝试从XML文件中提取信息并将其保存到数据库中。获取数据工作得很好,就像从数据库中获取数据一样,所以我知道它既不是数据库连接的问题,也不是XML文件的问题。

$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)的返回值并且它返回true(“成功保存”),但数据没有保存,并且没有错误。我试过没有关系(删除了它在数据库中的要求),所以它应该保存没有错误,但它仍然不保存。我还仔细检查了模型中的关系设置,它们很好。

我还尝试绕过Datamapper并直接$this->db->insert('doctors',$data)将数据转换为数组,但数据仍然无法保存。我也尝试从浏览器运行它(绕过引导程序)以查看问题是否与从命令行运行有关,但这也无效。我也没有自动加载任何会话或身份验证库,因此不会触发引导程序的已知问题。

有没有人知道为什么这可能不起作用?

1 个答案:

答案 0 :(得分:0)

我发现了正在发生的事情。事实证明,SimpleXML对象的属性(单个记录)没有被Datamapper作为字符串获取,因此它们没有被转义,而MySQL也在窒息。在设置模型对象的值($dr->first_name = (string)$doctor->First_Name;)时对它们进行类型转换修复了这个问题。

在对象尝试保存后,我能够通过$dr->check_last_query()获取插入查询。