SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1172 Результат состоит из более чем одной строки - PullRequest
1 голос
/ 19 января 2020

Когда я пытаюсь вставить несколько строк в один запрос, я получаю эту ошибку:

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1172 Результат состоит из более чем одной строки

Вот код, который я использовал:

  public function submitAnswers($q)
   {
    try
      {
        $sql = 'INSERT INTO `result_answers` (`resultID`, `questionID`, `answerID`, `isTrue`,`textAnswer`) VALUES ';
        foreach($q as $question => $answer){
        if($answer[0] == 0){
        for($i = 1;$i < count($answer);$i++){
            $sql .= '((select max(id) from result r where r.studentID = :studentID), ' . $question . ', ' . $answer[$i] .', NULL, NULL),';}
        }elseif($answer[0] == 1){
          $sql .= '((select max(id) from result r where r.studentID = :studentID), ' . $question . ', NULL, ' . $answer[1] .', NULL),';
        }elseif($answer[0] == 2){
          $sql .= '((select max(id) from result r where r.studentID = :studentID), ' . $question . ', NULL, NULL, "' . $answer[1] .'"),';
        }
        }
          $query = rtrim($sql,',');
         $stmt = $this->connect()->prepare($query);
         $stmt->bindparam(":studentID",$_SESSION['student']->id);

         $stmt->execute();

         return true;
      }
    catch(PDOException $e)
      {
         echo $e->getMessage();
         return false;
      }
   }

Когда я выполняю вывод $query непосредственно в моей базе данных, строки успешно вставляются, поэтому я думаю, что по некоторым причинам PDO не позволяет вставка строк.

1 Ответ

0 голосов
/ 20 января 2020

Я выяснил причину проблемы. Оказалось, что в таблицу, в которую я вставлял данные, был TRIGGER BEFORE INSERT , а внутри триггера был оператор SELECT INTO, который возвращал более одной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...