Примите во внимание следующее:
ваши массивы должны иметь одинаковое количество элементов
переменная $query
никогда не используется, замените ее на$stmt
у вас есть четыре имени столбца, но шесть значений в выражении SQL
передают элемент массива в binValue()
, а не в массив
Пример:
<?php
$stmt = $conn->prepare(
"INSERT INTO ReserveerCursusCursisten
(Geslacht, Achternaam, Voorletters, Geboortedatum)
VALUES
(:geslachten, :achternamen, :voornamen, :geboortedata)
");
for($i = 0; $i < count($achternamen); $i++)
{
$stmt->bindValue(':geslachten', $geslachten[$i]);
$stmt->bindValue(':achternamen', $achternamen[$i]);
$stmt->bindValue(':voornamen', $voornamen[$i]);
$stmt->bindValue(':geboortedata', $geboortedata[$i]);
if ($stmt->execute() === false) {
echo "query is niet gelukt";
} else {
echo "query is gelukt";
}
}
?>
Примечания:
Вы можете пропустить bindValue()
и передать параметры в execute()
.В этом случае все параметры обрабатываются как строки (PDO::PARAM_STR
), тогда как с помощью bindValue()
вы можете определить тип данных параметра (одна из PDO::PARAM_*
констант).
<?php
$stmt = $conn->prepare(
"INSERT INTO ReserveerCursusCursisten
(Geslacht, Achternaam, Voorletters, Geboortedatum)
VALUES
(:geslachten, :achternamen, :voornamen, :geboortedata)
");
for ($i = 0; $i < count($achternamen); $i++)
{
$params = array($geslachten[$i], $achternamen[$i], $voornamen[$i], $geboortedata[$i]);
if ($stmt->execute($params) === false) {
echo "query is niet gelukt";
} else {
echo "query is gelukt";
}
}
?>
Часть документации PHP оподготовленные операторы:
вызов PDO :: prepare () и PDOStatement :: execute () для операторов, которые будут выполняться несколько раз с различными значениями параметров, оптимизирует производительность вашего приложения, позволяя драйверу согласовыватькэширование на стороне клиента и / или сервера плана запроса и метаинформации.Кроме того, вызов PDO :: prepare () и PDOStatement :: execute () помогает предотвратить атаки SQL-инъекций, устраняя необходимость вручную заключать в кавычки и экранировать параметры.