我继承了一个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);