Я хотел бы создать запрос, который может содержать или не содержать более одной части.Это означает, что я буду включать массив и проходить по нему, добавлять запрос к основному запросу SQL, а затем, наконец, подготовить его.
Прежде всего, я определил sql query
$sql = '';
, затем я определил foreach
значение цикла
$arrayLoopValue = 0;
, после этого у меня естьсоздал foreach
цикл.В котором я увеличил arrayLoopValue
, добавил sql
к новому запросу на основе индекса массива.
foreach($questionsArray as $questionAnswerRow){
$arrayLoopValue = $arrayLoopValue + 1;
$sql = $sql .
'INSERT INTO gosurveys_surveys_questions_answers
SET survey_id = :survey_id_' . $arrayLoopValue .
', question_id = :question_id_' . $arrayLoopValue .
', user_email = :user_email_' . $arrayLoopValue .
', answer_type = :answer_type_' . $arrayLoopValue .
', question_answer = :question_answer_' . $arrayLoopValue .
', question_answer_creation_date = UTC_TIMESTAMP(); ';
}
База данных / пример для этого запроса НЕ важна, так как все поля совпадают, и этоуже пусто.Требуется только структура, которая указана выше.
В следующей строке произойдет сбой.
$query = $this->conn->prepare($sql);
Я попытался echo
запрос и посмотреть, если что-то не так.Я получил следующий вывод:
INSERT INTO gosurveys_surveys_questions_answers
SET survey_id = :survey_id_1,
question_id = :question_id_1,
user_email = :user_email_1,
answer_type = :answer_type_1,
question_answer = :question_answer_1,
question_answer_creation_date = UTC_TIMESTAMP();
INSERT INTO gosurveys_surveys_questions_answers
SET survey_id = :survey_id_2,
question_id = :question_id_2,
user_email = :user_email_2,
answer_type = :answer_type_2,
question_answer = :question_answer_2,
question_answer_creation_date = UTC_TIMESTAMP();
Что правильно.После этой подготовки есть второй цикл foreach
.Но функция НЕ достигает после оператора prepare
.
Я хотел бы знать причину.MYSQL говорит следующее:
Неполученное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка;обратитесь к руководству, соответствующему вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования возле 'INSERT INTO gosurveys_surveys_questions_answers SET survey_id =?, Ques'