Bind Params In Criteria

When I have this code:




$criteria = new CDbCriteria();

    $criteria->with = array('tweTicketPriceLevels' => array('alias'=>'pl'));

    $criteria->condition = "(pl.start_timestamp - interval ':etz seconds') < (LOCALTIMESTAMP - interval ':stz seconds')";

    $criteria->addCondition("(pl.end_timestamp - interval ':etz seconds') >= (LOCALTIMESTAMP - interval ':stz seconds')");

    $criteria->addCondition('t.event_id = :eid');

    $criteria->addCondition('t.deleted IS NULL');

    $criteria->addCondition('pl.deleted IS NULL');

    $criteria->params = array(':etz' => (int)$etz, ':stz' => (int)$stz_offset, ':eid' => (int)$eid);

    

    return self::model()->findAll($criteria);



it write me the error: HY093: invalid parameter number, but when I write this:




$criteria = new CDbCriteria();

    $criteria->with = array('tweTicketPriceLevels' => array('alias'=>'pl'));

    $criteria->condition = "(pl.start_timestamp - interval '".$etz." seconds') < (LOCALTIMESTAMP - interval '".$stz_offset." seconds')";

    $criteria->addCondition("(pl.end_timestamp - interval ':etz seconds') >= (LOCALTIMESTAMP - interval ':stz seconds')");

    $criteria->addCondition('t.event_id = :eid');

    $criteria->addCondition('t.deleted IS NULL');

    $criteria->addCondition('pl.deleted IS NULL');

    $criteria->params = array(':eid' => (int)$eid);

    

    return self::model()->findAll($criteria);



it run without error. It is some bug, or it has some reason? I use postgresql database.

Your issue is that PDO that is used by Yii’s AR can’t handle 2 or more same named placeholders in a single query so you need to use :etz1, :etz2 etc. and then bind these to the same variable.