2011-02-25 12 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()で挿入クエリを取得できました。

関連する問題