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


YII 1.1 Failed to Execute the SQL Statement, Invalid Parameter

我继承了一个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框架项目,我没有写代码。有什么建议吗?

提前谢谢。

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

您的假设是,由于两个变量是相同的,即 :sdate,通过一次应该就足够了,但事实并非如此。您需要在查询中使用它们时传递它的次数。

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

    // 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);