Yii:php - >无法在SiteController中执行SQL命令

时间:2015-07-01 19:22:04

标签: php mysql sql yii yii2

_form.php提交到SiteController.php时出现问题会出现此错误消息,

“CDbCommand无法执行SQL语句:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法出错;”

无法运行查询。另外尝试使用另一个查询命令,错误是一样的。

SiteController.php

public function actionCreate()
{
    $model = new Detail;
   if (isset($_POST['Detail'])) {
       // print_r($_POST['Detail']);
        $model->attributes = $_POST['Detail'];
        $connection = Yii::app()->db;

        $data = date('Y-m-d');
        $date = "'" . $data . "'";
        $teach_id = Yii::app()->user->getId();

        $i = 1;
        foreach ($_POST['Detail'] as $stud=>$status) 
        {
            $sql = 'INSERT INTO {{detail}} (`id`, `student_id`, `teacher_id`, `date`, `status`) VALUES 
                    (NULL, ' . $stud . ',' . $teach_id . ',' . $date . ', ' . $i . ' );';


            $command = $connection->createCommand($sql);
            $exec = $command->query();
        } 
        if ($exec) {
            $this->redirect(array('index'));
        }
    }
    $this->render('create', array('model' => $model, ));
}

2 个答案:

答案 0 :(得分:1)

尝试用实际表名替换{{detail}},并为每个变量使用双引号表示整个字符串和单引号

"INSERT INTO {{detail}}
    (`id`, `student_id`, `teacher_id`, `date`, `status`)
VALUES
    (NULL, '$stud', '$teach_id', '$date', '$i');"

替换

$date = "'" . $data . "'";

$date = $data;

并且您在不同情况下使用$_POST数组的相同键

$model->attributes = $_POST['Detail'];
...
foreach ($_POST['Detail'] as $stud => $status) 

答案 1 :(得分:0)

我认为问题是单引号内的'{{detail}}'。 PHP中的单引号是托管as is,并且不会对内容进行评估。我认为你使用花括号来隔离你想要评估的变量的名称,然后使用单引号是一个错误。 为此,您需要或使用双引号" ......"或使用字符串连接,就像在SQL指令的其他部分中一样。