

どうやって確認していいのかわからず、専門家の知見を拝借させてください。

仕事でphalconを使い始めました。英語マニュアルと格闘しながらModel周りを作っているのですが、例えばこんなコードではbindがうまく動いてくれませんでした。

[code]

    $criteria = self::query();
    $criteria->betweenWhere('created', ":start:", ":end:");
    $criteria->bind(array("start" => $start, "end" => $end));
    $criteria->bindTypes(
        array("start"=>Column::TYPE_DATETIME,"end"=>Column::TYPE_DATETIME)
    );
    $row = $criteria->execute();
    
[/code]

実行時のエラー

[code]

    PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in
    
[/code]

ですが、以下のコードであれば正常に動作します。

[code]

    $criteria = self::query();
    $criteria->where('created between :start: and :end:');
    $criteria->bind(array("start" => $start, "end" => $end));
    $row = $criteria->execute();
    
[/code]

で、これも動きます

[code]

    $criteria = self::query();
    $criteria->betweenWhere('created', $start, $end);
    $row = $criteria->execute();
    
[/code]

これはつまり、betweenWhereはautobindしてくれているということでしょうか？  
であればSQLインジェクション対策としてそれに頼りたいと思うのですが、  
実際のところどうなんでしょうか？  
ご教授くださいm(__)m


CC BY-SA 3.0
2015-06-08T10:26:41.360
11123
2016-04-26T02:34:40.353
2015-06-30T06:34:41.030
8936
8936
question
php
phalcon のCriteriaのbetweenWhereはautobindなんでしょうか？


自動バインドされている、というドキュメントの記述は見つけられませんでしたが、 Phalcon のソースコードを見たところ、次のような PHP
コードと対応するようです。

[code]

    $minimumKey = ...; $maxmumKey = ...;
    
    $criteria->andWhere(
        $expr . " BETWEEN :" . $minimumKey . ": AND :" . $maximumKey . ":",
        [$minimumKey => $minimum, $maximumKey => $maximum]
    );
    
[/code]

Zephier という PHP に似た言語で書かれているので、比較的読みやすいかと思います。

<https://github.com/phalcon/cphalcon/blob/phalcon-v2.0.2/phalcon/mvc/model/criteria.zep#L381>


CC BY-SA 3.0
2015-06-08T10:55:17.167
11124
2015-06-08T10:55:17.167
8000
11123
answer