我继承了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框架项目,我没有编写代码。有什么建议吗?
提前致谢。
答案 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}}