WindowsとLinuxでのPDOの動作の違い 
水曜日, 12月 13, 2006, 11:22 AM -  PHP
お昼でございます。
ども、小堤です。

PDO,WindowsとLinuxで挙動が違うぞごらー!ってはなしなんです。
WIndowsだと文字の大小気にしなかったりするのはご存じの方多いと思いますが、PDOのBindが完璧に違います。

:titleとか指定してあるものに対して、バインドされてないのはいいんです。だけど、使ってないけどバインドしておこう・・・これがだめです。

例えば、:title,:name を使ってて、この2つはバインドしてあって、さらに:ageなんてものをバインドしようものなら、LinuxでExceptionはきやがります。
仕様なのかどうなのか・・・やめてほしい。
Windowsでは全く起きない現象なので、XAMPP環境で開発してるんるんでLinuxサーバにのせた瞬間にException・・・むきぃー!!!

ああ、あと一発でSELECT/INSERTしようとか今まで結構やってたりしましたが、MySQL便利・・・InnoDBにすれば、すったらこと考えなくてもいいんだもんね・・やになっちゃう(T_T

フォーラムは8割方できているので、近日設置されるのではないでしょうか(他人事)
さて、業務が押してるので :(
コメントを書く   |  このエントリーのURL   |  related link   |   ( 2.9 / 36 )

休憩がてら残作業。 
水曜日, 12月 13, 2006, 06:05 AM -  PHP
おはようございます。。。。って普通に言いたい小堤です。

さて、しょっと実務が押していてxFrameworkの方ががりがりできる状況ではないのですが、休憩がてら修正作業をしてみました。。。って休憩じゃないじゃん。

■ ライブラリのパスを、階層を遡るようにする。
 →別クラスで管理する
■ グローバルアクションスタックを利用すると、パラメータの設定がずれる。
■ LiveRecord:実行前にUpdate文の取得できるようなメソッドをつくる
■ LiveRecord:実行前にInsert文の取得できるようなメソッドをつくる
■ LiveRecord:実行前にDelete文の取得できるようなメソッドをつくる
■ LiveRecord:サブクエリが実行できるようにする(無段階実行)

□ グローバルアクションスタックにパラメータを設定できるようにする。
□ ロガーのファイルを日付単位、容量単位(quart処理)で出力する機能を実装


■がおわった作業。メモ。
フォーラム作ってるってはなしを書きましたが、そこでもっとこうすれば楽なのになぁとか全部対応していってたらこんなことに(T_T)自分でやること増やしてるの。
そして、その作業をQKとかいってるの(涙)

休息がほしい・・。
コメントを書く   |  このエントリーのURL   |  related link   |   ( 2.9 / 33 )

ふぉーらむつくってまつ。 
火曜日, 12月 12, 2006, 07:13 PM -  PHP
お疲れ様です。小堤です。

いやいや・・・意外と見られてることにびっくりです(@@;

さて、いまフォーラム作ってます。ブログもまともにかいてないのは、そいつのせいなんですが。xFrameworkのフォーラムです。コーディングは終わったのですが、実際にアプリを作っているときに、もっとこういう機能があれば楽なのにとか・・思っていると、xFrameworkの方の修正も同時にやっているため難航してます(T_T)

いま自分の中であがっている修正リストがすべておわったらPreview3だそうかな。

それからαに向けてのテストして・・・公開して・・声聞きながらβにして・・・安定したらSTABLEに・・なげー。

ちなみにfutureに書いてある機能が2.1.1ではだいぶ減ります。

あとですね、PDO関連について。
2.1系からDatabaseManagerというクラスが実装されて、こいつのおかげでコネクションを複数もつことと、切り替えることができるようになったんですが、PDOってNEWしたときにコネクションを張るので、DB使わない場所では、はらないでほしーっていう話があったりなかったり。まぁ仮想コンテンツルートにしてしまってデータベース使わない使わない設定にするってのも有りかなとおもってたけども、まぁ使いたくなったときに設定変えないとだめ。だからなんかやだなぁとおもって、「チャレンジコネクション」という機能を実装しました。

これは、データベース使用状態で、チャレンジコネクションがONになっていると、起動時にPDOオブジェクトを生成せずに、getConnectionでコネクションつかいたーいって言われたときに、接続を試みます。

まぁデフォルト設定が上記のデータベースON、チャレンジコネクションONで、気にせず使えるし、必要な時に裏でそうやってるんだなぁという状況にしたほうがみんな幸せかなぁと(笑)
とりあえずこの機能はもう実装してあるので、Preview3を出すならそのときに乗っかります。

さて・・・まだまだやることあるから、一つずつつぶしていくかぁ。
コメントを書く   |  このエントリーのURL   |  related link   |   ( 2.9 / 33 )

LiveRecord使い方一覧?! 
月曜日, 12月 11, 2006, 02:39 AM -  PHP
LiveRecord 一つずつ説明しようと思ったけども・・・一応コチラで開発しているときのテストコードのっけときます。見た方がはやいとおもって(笑)

        //------------------------------------------------------------
// INSERT VALUES テスト
//------------------------------------------------------------

$arrParams = array();

$objTBL->id = 9;
$objTBL->name = '入力データ';
$objTBL->insert( $arrParams );

unset( $arrParams );

//------------------------------------------------------------
// INSERT VALUES テスト2
//------------------------------------------------------------

$arrParams = array();
$arrParams[ LiveRecord::SUFFIX ] = ' aaaaaaaa ';

$objTBL->id = 9;
$objTBL->name = '入力データ';
$objTBL->insert( $arrParams );

unset( $arrParams );



//------------------------------------------------------------
// INSERT SELECT テスト
//------------------------------------------------------------

$arrParams = array();
$arrParams[ 'columns' ] = array( "MAX( id ) + 1", ':name' );
$arrParams[ 'where' ] = '';

$objTBL->id = 10;
$objTBL->name = '入力データ10';
$objTBL->insert( $arrParams );

unset( $arrParams );


//------------------------------------------------------------
// INSERT SELECT テスト2
//------------------------------------------------------------

$arrParams = array();
$arrParams[ 'columns' ] = array( "MAX( id ) + 1", ':test_param' );
$arrParams[ 'where' ] = '';
$arrParams[ 'binds' ] = array( 'test_param' => 'ほげー!' );

$objTBL->id = 10;
$objTBL->name = '入力データ12';
$objTBL->insert( $arrParams );

unset( $arrParams );



//------------------------------------------------------------
// UPDATE テスト
//------------------------------------------------------------

$objTBL->id = 10;
$objTBL->name = '入力データUPDATE';
$objTBL->update();


//------------------------------------------------------------
// UPDATE テスト2
//------------------------------------------------------------

$arrParams = array();
$arrParams[ 'where' ] = 'id = 55';

$objTBL->objRows->clearParameters();
$objTBL->name = 'aaaaaaaaa';
$objTBL->update( $arrParams );

unset( $arrParams );


//------------------------------------------------------------
// UPDATE テスト3
//------------------------------------------------------------

$arrParams = array();
$arrParams[ LiveRecord::WHERE ] = 'id = 1';
$arrParams[ LiveRecord::SUFFIX ] = ' AND id = 2';

$objTBL->objRows->clearParameters();
$objTBL->name = '更新';
$objTBL->update( $arrParams );

unset( $arrParams );


//------------------------------------------------------------
// DELETE テスト1
//------------------------------------------------------------

$objTBL->delete();


//------------------------------------------------------------
// DELETE テスト2
//------------------------------------------------------------

$arrParams = array();
$arrParams[ 'where' ] = 'id = 55';

$objTBL->delete( $arrParams );

unset( $arrParams );


//------------------------------------------------------------
// DELETE テスト3
//------------------------------------------------------------

$arrParams = array();
$arrParams[ LiveRecord::WHERE ] = 'id = 1';
$arrParams[ LiveRecord::SUFFIX ] = ' AND id=9';

$objTBL->delete( $arrParams );

unset( $arrParams );


//------------------------------------------------------------
// SELECT テスト
//------------------------------------------------------------

$arrParams = array();
$arrRows = $objTBL->select( $arrParams );


//------------------------------------------------------------
// SELECT テスト2
//------------------------------------------------------------

$arrParams = array();
$arrParams[ 'where' ] = 'id=2';
$arrRows = $objTBL->select( $arrParams );



//------------------------------------------------------------
// SELECT テスト3
//------------------------------------------------------------

$arrParams = array();
$arrParams[ LiveRecord::COLUMNS ] = array( 'id' => 'popop', 'name' => 'hogehoge' );
$arrParams[ LiveRecord::BINDS ] = array( "atari" => "%ほ" );
$arrParams[ LiveRecord::WHERE ] = "name LIKE :atari";
$arrParams[ LiveRecord::ORDER_BY ] = array( 'id' => 'ASC' );
$arrRows = $objTBL->select( $arrParams );


//------------------------------------------------------------
// SELECT テスト3
//------------------------------------------------------------

$arrParams = array();
$arrParams[ LiveRecord::COLUMNS ] = array( 'id' => 'popop', 'name' => 'hogehoge' );
$arrParams[ LiveRecord::ORDER_BY ] = array( 'id' => 'DESC' );
$arrParams[ LiveRecord::LIMIT ] = 2;
$arrParams[ LiveRecord::OFFSET ] = 0;
$arrRows = $objTBL->select( $arrParams );


//------------------------------------------------------------
// SELECT テスト4
//------------------------------------------------------------

$arrParams = array();
$arrParams[ LiveRecord::COLUMNS ] = array( 'SUM( id )' => 'popop', 'name' => 'hogehoge' );
$arrParams[ LiveRecord::GROUP_BY ] = array( 'id' );
$arrRows = $objTBL->select( $arrParams );

//------------------------------------------------------------
// SELECT テスト5
//------------------------------------------------------------

$arrParams = array();
$arrParams[ LiveRecord::COLUMNS ] = array( 'SUM( id )' => 'popop', 'name' => 'hogehoge' );
$arrParams[ LiveRecord::GROUP_BY ] = array( 'id' );
$arrParams[ LiveRecord::HAVING ] = " SUM( id ) > 11 ";
$arrRows = $objTBL->select( $arrParams );


//------------------------------------------------------------
// SELECT テスト6
//------------------------------------------------------------

$arrParams = array();
$arrParams[ LiveRecord::COLUMNS ] = array( 'SUM( id )' => 'popop', 'name' => 'hogehoge' );
$arrParams[ LiveRecord::GROUP_BY ] = array( 'id' );
$arrParams[ LiveRecord::HAVING ] = " SUM( id ) > 11 ";
$arrParams[ LiveRecord::PREFIX ] = " ";
$arrParams[ LiveRecord::SUFFIX ] = " OR SUM(id) < 11; ";
$arrRows = $objTBL->select( $arrParams );


//------------------------------------------------------------
// SELECT テスト7 CROSS JOIN
//------------------------------------------------------------

$arrParams = array();
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'CROSS',
LiveRecord::JOIN_TABLE => 'tbl_hoge'
);
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'CROSS',
LiveRecord::JOIN_TABLE => 'tbl_hoge2'
);
$arrRows = $objTBL->select( $arrParams );



//------------------------------------------------------------
// SELECT テスト8 CROSS JOIN2
//------------------------------------------------------------

$objTBLHoge = new tbl_hoge( $this->objDatabase->getConnection() );
$arrTempParams[ LiveRecord::WHERE ] = 'c_id = 1';


$objTBLHoge2 = new tbl_hoge2( $this->objDatabase->getConnection() );
$arrTempParams2[ LiveRecord::WHERE ] = 'c_id = 1';


$arrParams = array();
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'CROSS',
LiveRecord::JOIN_TABLE => $objTBLHoge,
LiveRecord::JOIN_PARAMS => $arrTempParams
);
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'CROSS',
LiveRecord::JOIN_TABLE => $objTBLHoge2,
LiveRecord::JOIN_PARAMS => $arrTempParams2
);
$arrRows = $objTBL->select( $arrParams );



//------------------------------------------------------------
// SELECT テスト9 INNER JOIN
//------------------------------------------------------------

$arrParams = array();
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'INNER',
LiveRecord::JOIN_TABLE => 'tbl_hoge',
LiveRecord::JOIN_LFN => 'tbl_test.id',
LiveRecord::JOIN_RFN => 'tbl_hoge.c_id'
);
$arrRows = $objTBL->select( $arrParams );


//------------------------------------------------------------
// SELECT テスト9 INNER JOIN2
//------------------------------------------------------------

$objTBLHoge = new tbl_hoge( $this->objDatabase->getConnection() );
$arrTempParams[ LiveRecord::WHERE ] = 'c_id = 3';

$objTBLHoge2 = new tbl_hoge2( $this->objDatabase->getConnection() );
$arrTempParams2[ LiveRecord::WHERE ] = 'c_id = 3';

$arrParams = array();
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'RIGHT OUTER',
LiveRecord::JOIN_TABLE => $objTBLHoge,
LiveRecord::JOIN_PARAMS => $arrTempParams,
LiveRecord::JOIN_LFN => 'tbl_test.id',
LiveRecord::JOIN_RFN => 'tbl_hoge.c_id'
);
$arrParams[ LiveRecord::JOINS ][] = array(
LiveRecord::JOIN_TYPE => 'RIGHT OUTER',
LiveRecord::JOIN_TABLE => $objTBLHoge2,
LiveRecord::JOIN_PARAMS => $arrTempParams,
LiveRecord::JOIN_LFN => 'tbl_test.id',
LiveRecord::JOIN_RFN => 'tbl_hoge2.c_id'
);
$arrRows = $objTBL->select( $arrParams );



2 comments ( 24 views )   |  このエントリーのURL   |  related link   |   ( 3 / 24 )

xFrameworkインストーラー完成 
土曜日, 12月 9, 2006, 08:36 PM -  PHP
まぁ似たようなこと書いた覚えがありますが・・。
おはようございます、小堤です。

さて、xFrameworkのインストーラーが出来ました。デザインも(ちょっと最終調整あるけども)こんなかんじです。


※クリックしてください。

デザイン的にも、内容的にも固まったので公開します。
今晩たぶんリリースするxFramework2.1.1 Preview2に入ります。
これで.htaccessとかの書き換え作業がなくなり、スムーズにxFrameworkの導入が行えると思います。

これでxFramework2.1.1で実装する予定だったLiveRecord、CLI版、インストーラーが完成です。あとは動作チェックを細かくやってからStableにしてリリースします。
ちょっとドキュメントが追いついていないですが、そっちも随時更新してきます。

ああ・・おなかすいた。


Back Next