Доброго времени суток! Возникла такая проблема:
При попытке добавить массив в БД, выдает следующую ошибку:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2498' for key 'PRIMARY'' in /home/n/n92687o9/n92687o9.beget.tech/public_html/controllers/AdminProductController.php:267 Stack trace: #0
Содержание массива:
$products
Array
(
[0] => Array
(
[id] => 0
[name] => Ноутбук
[code] => 2028029
[price] => 2000
)
[1] => Array
(
[id] => 0
[name] => Ноутбукк
[code] => 2028069
[price] => 2498
)
)
Сам код добавления:
$db = Db::getConnection();
$sql = 'INSERT INTO product '
. '(id, name, code, price )'
. 'VALUES ';
//Формирование запроса:
$j = 0;
foreach ($products as $product) {
if($j > 0) {$sql .= ', ';}
$sql .= "(";
$k = 0;
foreach ($product as $key => $value) {
$sql .= ":".$key;
if($k < count($product)-1) {$sql .= ", ";}
$k++;
}
$sql .= ")";
$j++;
}
//Формирование параметров для подстановки:
$result = $db->prepare($sql);
$j = 0;
foreach($products as $product) {
$k = 0;
foreach($product as $key => $value) {
$result->bindParam(':'.$key, $value, PDO::PARAM_STR);
$k++;
}
$j++;
}
$result->execute();
Пробовал изменить
INSERT INTO
на
REPLACE INTO
, тогда ошибка исчезает,но в БД записывается одно и то же значение (2498) во все поля.
Запрос формируется правильно(проверял), а вот с подстановкой параметров у меня сомнения. Можно ли так вообще делать? Или есть какой-нибудь не настолько извращенный способ решения этой задачи?
Заранее спасибо.