Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Не записываются данные в БД


owner25

Recommended Posts

Всем привет, помогите пожалуйста.

foreach($this->request->post['product'] as $key => $product) {
					$week = $product['week'];
					$id = $product['id'];
					$quantity = $product['quantity'];

					$this->db->query(""
						. " INSERT INTO"
						. " `" . DB_PREFIX . "ar_productday`"
						. " SET"
						. " product_id='". $id ."', quantity='". $quantity ."', week='". $week ."'"
						. " ON DUPLICATE KEY UPDATE product_id='". $id ."'");

				}

Есть такой цикл, проблема в том, что записываются все данные кроме поля $quantity, в БД данная ячейка присутствует.

Не могу понят в чём проблема.

Заранее спасибо за помощь!)

Змінено користувачем owner25
Надіслати
Поділитися на інших сайтах


@owner25 , кроме сказанного выше, неправильно собран запрос при ON DUPLICATE KEY UPDATE.

Проверка на дубликат происходит по первичному ключу поля product_id, то есть при повторе по product_id вы хотите обновить product_id на тот же product_id, что не даст никакого эффекта и запись не будет обновлена.

Обновлять как раз нужно все данные, кроме product_id, по которому идет сравнение.

Ну и забегая наперед, собирайте пакетный запрос с одним INSERT'ом, чтобы ускорить обновление.

Пример хорошего подхода:

 

$products = $this->request->post['product'];

while ($products) {
  $insert = array();

  foreach (array_splice($products, 0, 250) as $item) {
    $insert[] = "'" . (int)$item['id'] . "','" . (int)$item['quantity']  . "','" . (int)$item['week'] . "'";
  }

  if ($insert) {
    $this->db->query("INSERT INTO " . DB_PREFIX . "ar_productday (product_id, quantity, week) VALUES (" . implode("),(", $insert) . ") ON DUPLICATE KEY UPDATE quantity = VALUES(quantity), week = VALUES(week)");
  }
}

 

  • +1 3
Надіслати
Поділитися на інших сайтах

1 час назад, SooR сказал:

@owner25 , кроме сказанного выше, неправильно собран запрос при ON DUPLICATE KEY UPDATE.

Проверка на дубликат происходит по первичному ключу поля product_id, то есть при повторе по product_id вы хотите обновить product_id на тот же product_id, что не даст никакого эффекта и запись не будет обновлена.

Обновлять как раз нужно все данные, кроме product_id, по которому идет сравнение.

Ну и забегая наперед, собирайте пакетный запрос с одним INSERT'ом, чтобы ускорить обновление.

Пример хорошего подхода:

 


$products = $this->request->post['product'];

while ($products) {
  $insert = array();

  foreach (array_splice($products, 0, 250) as $item) {
    $insert[] = "'" . (int)$item['id'] . "','" . (int)$item['quantity']  . "','" . (int)$product['week'] . "'";
  }

  if ($insert) {
    $this->db->query("INSERT INTO " . DB_PREFIX . "ar_productday (product_id, quantity, week) VALUES (" . implode("),(", $insert) . ") ON DUPLICATE KEY UPDATE quantity = VALUES(quantity), week = VALUES(week)");
  }
}

Не работает к сожадению

 

Надіслати
Поділитися на інших сайтах


11 часов назад, SooR сказал:

@owner25 , кроме сказанного выше, неправильно собран запрос при ON DUPLICATE KEY UPDATE.

Проверка на дубликат происходит по первичному ключу поля product_id, то есть при повторе по product_id вы хотите обновить product_id на тот же product_id, что не даст никакого эффекта и запись не будет обновлена.

Обновлять как раз нужно все данные, кроме product_id, по которому идет сравнение.

Ну и забегая наперед, собирайте пакетный запрос с одним INSERT'ом, чтобы ускорить обновление.

Пример хорошего подхода:

 


$products = $this->request->post['product'];

while ($products) {
  $insert = array();

  foreach (array_splice($products, 0, 250) as $item) {
    $insert[] = "'" . (int)$item['id'] . "','" . (int)$item['quantity']  . "','" . (int)$product['week'] . "'";
  }

  if ($insert) {
    $this->db->query("INSERT INTO " . DB_PREFIX . "ar_productday (product_id, quantity, week) VALUES (" . implode("),(", $insert) . ") ON DUPLICATE KEY UPDATE quantity = VALUES(quantity), week = VALUES(week)");
  }
}

 

После выполнения запроса 504 ошибка

Надіслати
Поділитися на інших сайтах


7 часов назад, owner25 сказал:

После выполнения запроса 504 ошибка

У меня ошибка, не $product['week'], а $item['week'], исправил. 

Но также включите отображение ошибок 

 

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(-1);

 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.