我偶尔会遇到CakePHP 3.1.3的问题,显示此错误 SQLSTATE [HY000]:一般错误:1个SQL变量太多。随着它的出现,很难在我的最后重新制作它。我附上了这个错误的图片。
CakePHP 3.0 - SQLSTATE[HY000]: General error: 1 too many SQL variables
我观察到我通常会在下面提供的代码中得到错误。以下代码将根据多个复选框选择获得多个ID。之后,它会根据所选的ID删除学生。我问的问题是我得到的错误是由我的代码引起的,还是由于Debugkit我看到有人在这个链接中发布了类似的问题(https://github.com/cakephp/cakephp/issues/7373)。如果它是由Debugkit引起的,我该怎样才能迅速解决它?
$deleteList = $this->request->data['selected'];
$classids = $studentclassTable->find()
->select(['classroom_id'=>'Studentclassrooms.classroom_id'])
->where(['student_id IN' => $deleteList])
->hydrate(false)
->toArray();
foreach($deleteList as $id) {
$student = $this->Students->findById($id)->first();
if($student){
array_push($usernames, $student['firstname'].' '.$student['lastname']);
$this->Students->delete($student);
}
}
答案 0 :(得分:3)
如果仔细查看堆栈跟踪,您应该看到这源于Debug Kit,它是清理请求历史记录的垃圾收集机制。
查看查询,似乎您的Debug Kit版本不是最新版本,最新版本将使用NOT IN
条件(自3.1.7开始),默认情况下最多只有20行是保留,因此将在查询中设置相同的占位符。
参见 https://github.com/cakephp/debug_kit/pull/381
可以通过全局DebugKit.requestCount
配置选项配置要保留的最大行数。
简而言之,更新您的Debug Kit依赖项。