Barmar верен, вы не можете выполнить несколько операторов SQL с query()
. Есть mysqli_multi_query()
, но вряд ли когда-либо есть оправдание для использования этого. Бывший технический директор MySQL однажды сказал мне однозначно: «нет причин для существования нескольких запросов».
Вы должны использовать параметры вместо копирования переменных $ _POST непосредственно в ваши строки SQL. Это не сложно, на самом деле это делает код проще , чем возиться с запутанными кавычками в кавычках и mysqli_real_escape_string()
и так далее.
Я бы не стал пытаться вставить несколько кортежей в один оператор INSERT. Сколько веток может быть в одном POST? Максимум несколько десятков? Недостаточно, чтобы сделать INSERT одним оператором. Так что просто позвоните execute()
для подготовленной вставки, один раз для каждой строки.
$sql = "INSERT INTO batch
SET batch=?, bdescription=?, branch=?, course=?, semester=?,
day=?, hour=?, user=?";
$stmt = $conn->prepare($sql) or die($conn->error);
$description = '';
$stmt->bind_param('ssssssss', $batch, $description, $i, $cid, $semester, $day, $hour, $usnid);
for($i=0;$i<$rowCount;$i++){
$description = $_POST['branch'][$i];
$stmt->execute() or die($stmt->error);
}
Прочтите руководство для https://www.php.net/manual/en/mysqli-stmt.bind-param.php, чтобы получить больше примеров кода.