CakePHP 3.0:SQLSTATE[HY000]:一般错误:1 SQL变量太多


CakePHP 3.0: SQLSTATE[HY000]: General error: 1 too many SQL variables

CakePHP 3.1.3偶尔会出现问题,显示此错误SQLSTATE[HY000]:一般错误:1个SQL变量过多。我很难在我这边重新制作这个,因为它来了又去。我已附上此错误的图片。

CakePHP 3.0-SQLSTATE[HY000]:一般错误:1个SQL变量过多

我观察到,我通常会在下面提供的代码中出现错误。下面的代码将根据多个复选框的选择获得多个id。之后,它会根据所选的id删除学生。我要问的问题是,我收到的错误是由我的代码引起的,还是由于我看到有人在这个链接中发布了类似的问题(https://github.com/cakephp/cakephp/issues/7373)。如果它是由德彪基特引起的,我该如何迅速解决它?

$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);
    }
}

如果您仔细查看stacktrace,您应该会发现这源于Debug Kit,它是清理请求历史记录的垃圾收集机制。

查看查询,您的调试工具包版本似乎不是最新的,最新版本将使用NOT IN条件(自3.1.7起),默认情况下最多只保留20行,因此在查询中将设置相同数量的占位符。

请参阅https://github.com/cakephp/debug_kit/pull/381

要保留的最大行数可以通过全局DebugKit.requestCount配置选项进行配置。

长话短说,更新您的调试工具包依赖项。