YII 1.1无法执行SQL语句,参数无效

时间:2016-03-16 16:25:35

标签: php yii

我继承了YII框架项目,并且正在迁移到更好的服务器。我已修复了大部分错误,但现在我收到以下错误。

Internal Server error

CDbCommand failed to execute the SQL statement: SQLSTATE[HY093]: Invalid parameter number

我已将其缩小为以下几段代码。

// First Query    

        $criteria = new CDbCriteria();
        $criteria->addCondition('entertainer_id = :entertainerid');
        $criteria->addCondition('datetime_start <= :sdate' );
        $criteria->addCondition('datetime_end > :sdate' );
        $criteria->params = array(':entertainerid'=>$entertainer_id, ':sdate' => date('Y-m-d H:i:s', $inc_start));
        $scheduled =  EntertainerSchedule::model()->count($criteria);

// Second Query

        $inc_end = $inc_start + $inc_seconds;
        $criteria = new CDbCriteria();
        $criteria->addCondition('entertainer_id = :entertainerid');
        $criteria->addCondition('datetime_start <= :sdate' );
        $criteria->addCondition('datetime_end > :sdate' );
        $criteria->addCondition('status != :statusCancel' );
        $criteria->params = array(':entertainerid'=>$entertainer_id, ':sdate' => date('Y-m-d H:i:s', $inc_start), ':statusCancel'=>Reservation::STATUS_CANCELLED);
        $reserved =  Reservation::model()->count($criteria);

该网站目前正在使用它的旧服务器,我尝试在新服务器上降级php版本并且没有修复错误,这使情况更糟。

这是我第一次参与的YII框架项目,我没有编写代码。有什么建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

在您的第一个查询中,有 3 变量,但您只传递 2 。同样,在您的第二个查询中有 4 变量,但您只传递 3

你的假设是,由于两个变量是相同的,即 // First Query $criteria = new CDbCriteria(); $criteria->addCondition('entertainer_id = :entertainerid'); $criteria->addCondition('datetime_start <= :sdate' ); $criteria->addCondition('datetime_end > :sdate' ); $criteria->params = array(':entertainerid'=>$entertainer_id, ':sdate' => date('Y-m-d H:i:s', $inc_start), ':sdate' => date('Y-m-d H:i:s', $inc_start)); $scheduled = EntertainerSchedule::model()->count($criteria); // Second Query $inc_end = $inc_start + $inc_seconds; $criteria = new CDbCriteria(); $criteria->addCondition('entertainer_id = :entertainerid'); $criteria->addCondition('datetime_start <= :sdate' ); $criteria->addCondition('datetime_end > :sdate' ); $criteria->addCondition('status != :statusCancel' ); $criteria->params = array(':entertainerid'=>$entertainer_id, ':sdate' => date('Y-m-d H:i:s', $inc_start), ':sdate' => date('Y-m-d H:i:s', $inc_start), ':statusCancel'=>Reservation::STATUS_CANCELLED); $reserved = Reservation::model()->count($criteria); ,传递一次应该是足够的,但事实并非如此。您需要在查询中使用它时多次传递它。

因此,这些查询应如下所示。

{{1}}