У меня есть зацикленный запрос для вставки в базу данных MySQL, он отлично работает, чтобы делать то, что мне нужно, поскольку он принимает все пользовательские входные данные в массиве, а затем зацикливает их и вводит каждый в свою строку в базе данных..
$sql_insert_race_history = "INSERT INTO inf_race_history
(`inf_id`,`race_history`, `results`)
VALUES ";
if ($vracehistory != '') {
foreach ($vracehistory as $kay => $value) {
// $sql .= '' | $sql = $sql . '';
$sql_insert_race_history .= "('$inserted_id','{$value}','{$results[$kay]}'),";
}
} else {
$vracehistory = '';
}
// remove last `,` into query;
$sql_insert_race_history = rtrim($sql_insert_race_history, ',');
$countRow = count($_POST['racehist']);
//INSERT INTO THE DATABASE VIA QUERY
$results_racehistory = mysqli_query($vconn, $sql_insert_race_history);
Этот код работает и вставляет все, что мне нужно. Однако мне сказали, что он уязвим к атакам SQL-инъекций, поэтому я пытался предотвратить это, используя подготовленные операторы в каждой версии, которую я пробую.только пока циклы не работают, и он загружает только самый последний элемент в массиве
$stmtrace = $conn->prepare("INSERT INTO inf_race_history
(`inf_id`,`race_history`, `results`)
VALUES (?,?,?)");
if ($vracehistory != '') {
foreach ($vracehistory as $kay => $value) {
$stmtrace->bind_param("sss", $inserted_id,$value,$results[$kay]);
}
} else {
$vracehistory = '';
}
// remove last `,` into query;
$sql_insert_race_history = rtrim($stmtrace, ',');
$countRow = count($_POST['racehist']);
//INSERT INTO THE DATABASE VIA QUERY
$stmtrace->execute();
Я думаю, что это может быть связано с его изменением с .=
в цикле foreach на ->bind_param
как, может быть, это лишает возможности зацикливаться?хотя я не слишком уверен, а также как бы я повторил, что я пытаюсь повторить $stmtrace
хотя он говорит method _tostring is not implemented