2015-11-27 4 views
2

Я иногда получаю ошибку с CakePHP 3.1.3, которая показывает эту ошибку SQLSTATE [HY000]: Общая ошибка: 1 слишком много переменных SQL. Трудно переделать это с моей точки зрения, когда оно приходит и уходит. Я прикрепил изображение этой ошибки.CakePHP 3.0: SQLSTATE [HY000]: Общая ошибка: слишком много переменных SQL

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

Я заметил, что, как правило, я получаю сообщение об ошибке с кодом я представленным ниже. В приведенном ниже коде будет отображаться несколько идентификаторов на основе выбора нескольких флажков. После этого он удаляет ученика на основе выбранного идентификатора. Вопрос, который я задаю, заключается в том, является ли ошибка, которую я получаю, вызвана моим кодом, или это из-за 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); 
    } 
} 

ответ

3

Если вы внимательно посмотрите на StackTrace, вы должны увидеть, что это происходит от Debug Kit, это механизм сбора мусора, который очищает историю запросов.

Означает, что ваша версия Debug Kit не обновлена, последняя версия будет использовать условие NOT IN (начиная с версии 3.1.7), где по умолчанию хранится не более 20 строк, и, таким образом, в запросе будет задано одно и то же количество заполнителей.

См https://github.com/cakephp/debug_kit/pull/381

Максимальное количество строк, чтобы сохранить может быть сконфигурирован с помощью глобальной опции DebugKit.requestCount конфигурации.

Короче говоря, обновите свою зависимость от Debug Kit.

Смежные вопросы