ラベル php の投稿を表示しています。 すべての投稿を表示
ラベル php の投稿を表示しています。 すべての投稿を表示

2011年1月11日火曜日

PHPの浮動小数点処理に無限ループのバグ

PHPの浮動小数点処理に無限ループのバグ
http://slashdot.jp/developers/11/01/08/0527259.shtml

PHP5.2および5.3。
文字列"2.2250738585072011e-308"(304桁の10進数表記でも同様)からdoubleへの変換を、
PHPの32ビットプロセス上で実行した場合に無限ループする。。。

パッチ

2010年4月2日金曜日

propelで別名をつけてJOIN

以下のような同じテーブルをJoinして別名を付与する場合

SELECT `order_main`.*, `c1`.*, `c2`.*
FROM `order_main`
INNER JOIN `customer` `c1` ON `order_main`.`customer_id` = `c1`.`id`
INNER JOIN `customer` `c2` ON `c1`.`friend_id` = `c2`.`id`;

----------------------------------------------------------------

$criteria = new Criteria();

$c = clone $criteria;

// 顧客
$c->addAlias( 'c1', CustomerPeer::TABLE_NAME );
$c->addJoin( OrderMainPeer::CUSTOMER_ID, CustomerPeer::alias( 'c1', CustomerPeer::ID ), Criteria::INNER_JOIN );


// 顧客(紹介元)
$c->addAlias( 'c2', CustomerPeer::TABLE_NAME );
$c->addJoin( CustomerPeer::alias( 'c1', CustomerPeer::FRIEND_ID ), CustomerPeer::alias( 'c2', CustomerPeer::ID ), Criteria::LEFT_JOIN );


//---------------------
// カラム設定
//---------------------
// 受注
OrderMainPeer::addSelectColumns( $c );


// 顧客
$c_temp = clone $criteria;
CustomerPeer::addSelectColumns( $c_temp );
foreach( $c_temp->getSelectColumns() as $column )
{
$c->addSelectColumn( CustomerPeer::alias( 'c1', $column ) );
}


// 友達
$c_temp = clone $criteria;
CustomerPeer::addSelectColumns( $c_temp );
foreach( $c_temp->getSelectColumns() as $column )
{
$c->addSelectColumn( CustomerPeer::alias( 'c2', $column ) );
}


//-----------------------------
// 検索実行して結果を取得する
//-----------------------------
$rs = BasePeer::doSelect( $c );
$res = array( );

while( $result = $rs->fetch( ) )
{
$order_main = new OrderMain( );
$order_main->hydrate( $result );
$pos = self::NUM_COLUMNS - self::NUM_LAZY_LOAD_COLUMNS;

$c1 = new Customer();
$c1->hydrate( $result, $pos );
$pos += CustomerPeer::NUM_COLUMNS;

$c2 = new Customer();
$c2->hydrate( $result, $pos );

$c1->setCustomerRelatedByFriendId($c2);

$order_main->setCustomer($c1);

$res[] = $order_main;
}

return $res;

----------------------------------------------------------------

symfony1.4でのBasePeer::doSelect()の返却値は
PDOstatementなので
以前の->next()は使用できない

外部参照制約を宣言してある場合は
Base~Peerのfunction get~RelatedBy~() とかが参考になります

2010年3月17日水曜日

sfValidatorRegex パターン以外を正常とする

パターンにマッチしないものが正常

new sfValidatorRegex( array('pattern' => '/~/', 'must_match' => false));

must_matchオプションをfalseに設定する

※symfony1.3,1.4のみ有効


2010年3月11日木曜日

symfony 404 Not Found カスタマイズ

http://www.centsys.jp/service/technical_information/symfony/etc/20080517-2.html


symfony で404 not foundを任意のページに変更する。

app/config/setting.yml

default:
.actions:
error_404_module: error
error_404_action: error404Page

2010年3月9日火曜日

2010年3月5日金曜日

ArrayAccess インターフェイス

http://php.net/manual/ja/class.arrayaccess.php

配列としてオブジェクトにアクセスするための機能のインターフェイスです。


widgetSchema 配列と validatorSchema 配列は、
実際にはそれぞれ sfWidgetFormSchema とsfValidatorSchema と呼ばれる特殊なクラスで、
ArrayAccess インターフェイスを実装しています。

2010年3月4日木曜日