php связывает динамическое число переменных для запроса пакетной вставки

У меня есть веб-служба, в которой пользователь передает динамическое количество вопросов.

На стороне php я использую explode с? чтобы вырезать каждый вопрос. Затем мне нужно сделать пакетную вставку.

То, что я сделал до сих пор, выглядит следующим образом:

$checkInQs = explode("?", trim($_POST['checkInQs'], "?")); $checkInSql = "INSERT INTO CheckListQs (ID, GeofenceID, type, question) VALUES "; $checkInInsertQuery = array(); $checkInInsertData = array(); foreach($checkInQs as $q){ $checkInInsertQuery[] = "('',?, 1, ?)"; $checkInData[] = $geofenceID; $checkInData[] = $q; } 

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

 if (!empty($checkInInsertQuery)) { $checkInSql .= implode(', ', $checkInInsertQuery); $stmt = $db->prepare($checkInSql); $stmt->execute($checkInData); } 

Я не уверен, как связать параметры в моем случае. Я использую процедурные привязки. Я обычно связывал бы такие параметры:

 mysqli_stmt_bind_param($stmt, "is", $geofenceID, $question); mysqli_stmt_execute($stmt); 

Я думаю, что эта часть так же проста, как:

 $bindVar = ''; for ($i = 0; $i < count($checkInQs); $i++){ $bindVar .= "is"; } 

Но не я не уверен, как управлять передачей в остальной части данных?

В конце концов, я решил использовать транзакции, фиксации и откаты для получения желаемого результата:

 mysqli_query($con, "start transaction;"); $allQueriesOK = true; $checkInQs = explode("?", trim($_POST['checkInQs'], "?")); $checkInSql = "INSERT INTO CheckListQuestions (ID, GeofenceID, type, question) VALUES ('',?,0,?)"; mysqli_stmt_prepare($stmt, $checkInSql); foreach ($checkInQs as $q) { mysqli_stmt_bind_param($stmt, "is", $geofenceID, $q); if (!mysqli_stmt_execute($stmt)){ $allQueriesOK = false; $message = mysqli_error($con); break; } } mysqli_stmt_close($stmt); if ($allQueriesOK){ mysqli_query($con, "commit;"); } else{ mysqli_rollback($con); }