2015-04-03 3 views
1

У меня есть небольшая проблема с запросом к базе PDO.Как вставить или обновить несколько строк - PDO

Я хочу вставить или обновить поля в одном запросе. Я хочу вставить несколько записей в БД, но если уже есть поля «имя_файла» с выбранным именем, просто обновите остальные поля. Ниже вставьте мой PHP-код.

Например: Я добавляю 5 записей id_product (например, 1) и другие поля. Пример поля RECIVED от $ _POST:

(id_product, alt, file_name, main_photo) 
1, xxx, 1_1, 0; 
1, xxx, 1_2, 0; 
1, xxx, 1_3, 1; 

мой PHP код:

$query = "INSERT INTO product_image (id_product, alt, file_name, main_photo) VALUES "; 
     $part = array_fill(0, count($_POST['file_name']), "(?, ?, ?, ?)"); 
     $query .= implode(",", $part); 
     $query .= " ON DUPLICATE KEY UPDATE alt=VALUES(alt), main_photo=VALUES(main_photo)"; 
     $stmt = $this->_db->prepare($query); 

$j = 1; 
      $im_null = 0; 
      for ($i = 0; $i < count($_POST['file_name']); $i++) { 
       $stmt->bindParam($j++, $_POST['id_product'], \PDO::PARAM_INT); 
       $stmt->bindParam($j++, $_POST['alt'][$i], \PDO::PARAM_STR); 
       $stmt->bindParam($j++, $profile->base64_to_jpeg($_POST['file_name'][$i], APP_ROOT . '/uploads/products/' . $_POST['id_product'] . '_' . $_POST['file_nr'][$i]), \PDO::PARAM_STR); 
       ($_POST['main_photo'][$i] == 1) ? $stmt->bindParam($j++, $_POST['main_photo'][$i], \PDO::PARAM_INT) : $stmt->bindParam($j++, $im_null); 
      } 
      $stmt->execute(); 

В этом запросе вставок работает хорошо, но не обновляется, что является второй частью запроса.

ответ

0

Переместить $j = 1; внутри цикла, так как вы продолжаете увеличиваться $j.

$im_null = 0; 
for ($i = 0; $i < count($_POST['file_name']); $i++) { 
    $j = 1;