С технической точки зрения, вам даже не нужен цикл. Вы можете просто вставить все значения в один массив:
$query = 'INSERT INTO data (amount) VALUES ';
$valueSets = array_fill(0, count($prices), '(?)');//creates an array containing a (?) string for each price
$pdo = new PDO($dsn, $user, $pass, $attr);
$query .= implode(', ', $valueSets);//concatenate onto query string
$stmt = $pdo->prepare($query);
$stmt->execute($prices);
Вот и все. Конечно, это не очень хороший способ делать вещи, так что я бы, вероятно, использовать что-то вроде этого:
$stmt = $pdo->prepare('INSERT INTO data (amount) VALUES (:price)');
foreach ($prices as $price) {
$stmt->execute([':price' => $price]);
$stmt->closeCursor();//optional
}
Или, если вы действительно хотите использовать Mysqli:
$stmt = $link->prepare('INSERT INTO data (amount) VALUES (?)');
$price = null;
$stmt->bind_param('i', $price);//bind by reference
foreach ($prices as $price) {
$stmt->execute();//insert price
}
Но если честно: это, для меня, похоже, связано с DB. Я просто поставил цены в файле CSV или что-то в этом роде, а затем запустил запрос LOAD DATA LOCAL INFILE
вместо написания скрипта, чтобы вставить все значения
Использовать подготовленный оператор с переменной привязки; вам нужно только подготовить заявление один раз; а затем связать и выполнить внутри цикла –
^this. Подробнее: http://php.net/manual/en/mysqli.prepare.php – JimL
Это может быть один запрос, добавьте значения с запятой. '(". $ prices [i]. "),'. Затем 'rtrim' последний', '. – chris85