CDbCommand无法执行SQL语句:CDbCommand无法准备SQL语句

时间:2016-06-16 00:09:38

标签: php sql-server yii

我正在使用Yii与PHP和Sql Server 2008 R2。谁能告诉我问题出在哪里?

public function actionUpdate($id)
    {
        $model=$this->loadModel($id);

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['Hold']))
        {
            $model->attributes=$_POST['Hold'];
            $model->startTimeHour=cc("select code from Lookup where name='$model->startTime' and type='starttime'")->queryScalar();
            if($model->save())
                $this->redirect(array('view','id'=>$model->id));
        }

        $this->render('update',array(
            'model'=>$model,
        ));
    }

模型$model->startTime在Dropdown中保留值。这也是代码。

<div class="control-group">
        <label class="control-label"><?php echo $form->labelEx($model,'startTime'); ?></label>
        <div class="controls">
            <?php echo $form->dropDownList($model,'startTime',$this->_startTime); ?>
            <span class="help-inline"><?php echo $form->error($model,'startTime'); ?></span>
        </div>
    </div>

此行动作更新错误($ id)

$model->startTimeHour=cc("select code from Lookup where name='$model->startTime' and type='starttime'")->queryScalar();

错误讯息:

  

CDbCommand无法执行SQL语句:CDbCommand无法准备SQL语句

2 个答案:

答案 0 :(得分:1)

cc("") 问题:你有用的别名吗?

function cc($sql){ return Yii::app()->db->createCommand($sql); }

我建议您不要使用用户输入来创建SQL。在CActiveRecord中进行验证或不进行验证。绑定参数是SQL准备的最佳实践。此功能允许您不考虑SQL注入和参数转义。

很快,请更换

cc("select code from Lookup where name='$model->startTime' and type='starttime'")->queryScalar();

cc("select code from Lookup where name = :name and type = 'starttime'")->bindValues([':name' => $model->startTime])->queryScalar();

但是对于确切的答案我需要看看你的表Lookup的“创建语句”。

答案 1 :(得分:0)

感谢大家的回复。我的问题已经解决了......

我换线

$model->startTimeHour=cc("select code from Lookup where name='$model->startTime' and type='starttime'")->queryScalar();

$model->startTimeHour=date('H',strtotime($model->startTime));