将_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, ));
}
答案 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指令的其他部分中一样。