DataObjectを使ってデータベースに登録
さくっと登録すっか。
まずはテーブル設定
面倒なんで1テーブルで。
CREATE TABLE `PL_Entry` ( `id` INT DEFAULT '0' NOT NULL AUTO_INCREMENT , `datetime` INT DEFAULT '0' NOT NULL , `attachments` VARCHAR( 255 ) NOT NULL , `category` VARCHAR( 255 ) NOT NULL , `subject` TEXT NOT NULL , `contents` TEXT NOT NULL , `latitude` DOUBLE DEFAULT '0' NOT NULL , `longitude` DOUBLE DEFAULT '0' NOT NULL , PRIMARY KEY ( `id` ) , INDEX ( `category` ) ) TYPE = MYISAM ;
複数の添付ファイルはattachmentsにカンマ区切りででも入れとくか。
配列作ったり別テーブルにしたり面倒だし('A`)
複数の画像があった場合最初のイメージからGPS情報を拾うことにすべ。
Data_Object用のスタブ作成
まずはマニュアルに従って設定ファイルを作る。
[DB_DataObject] database = mysql://root:@localhost/test schema_location = /var/www/html/php/imagemaps class_location = /var/www/html/php/imagemaps require_prefix = do/ class_prefix = DO_ debug=5
あとはpear/DB/DataObject/createTables.phpに食わせればOK
$ php /usr/share/pear/DB/DataObject/createTables.php /var/www/html/php/imagemaps/tables.ini
これでPL_Entry.phpが出来た。
<?php /** * Table Definition for PL_Entry */ require_once 'DB/DataObject.php'; class DO_PL_Entry extends DB_DataObject { ###START_AUTOCODE /* the code below is auto generated do not remove the above tag */ var $__table = 'PL_Entry'; // table name var $id; // int(11) not_null primary_key auto_increment var $datetime; // int(11) not_null var $attachments; // string(255) not_null var $category; // string(255) not_null multiple_key var $subject; // blob(65535) not_null blob var $contents; // blob(65535) not_null blob var $latitude; // real(22) not_null var $longitude; // real(22) not_null /* ZE2 compatibility trick*/ function __clone() { return $this;} /* Static get */ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DO_PL_Entry',$k,$v); } /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE }
おし。
まずはテスト
<?php include_once("PEAR.php"); $config = parse_ini_file('do_pl_entry.ini',TRUE); $options = &PEAR::getStaticProperty('DB_DataObject','options'); $options = $config['DB_DataObject']; include_once("DB/DataObject.php"); function store(){ $entry = DB_DataObject::factory('PL_Entry'); $entry->datetime = date('U'); $entry->attachments = 'test.jpg'; $entry->category='test'; $entry->subject ='テスト'; $entry->contents='これはテストエントリです'; $entry->latitude = 142; $entry->longitude = 43 ; var_dump($entry); $id = $entry->insert(); echo $id ; } ?>
無茶苦茶ハマったポイント
- $optionsの読み込み
PEAR::getStaticProperty(...)を参照で取り出してINIで読み込んだデータをバインドしないと、データベースへの接続ができんかった。
ま、そのとおりなんだが。
- DB_DataObject::factory()の引数
ここはオブジェクト名じゃなくてテーブル名じゃないとアカン。
最初上のOptionsの設定をする前にオブジェクト名でロードして、なんとなくロードできてたから余計にハマった。
とりあえず更新できたってことで
あとはバインドコード書くだけだな。