2016-10-14 2 views
0

데이터 입력 :업데이트 데이터베이스가 배열에서 사용자가 입력 한

"product_description": [{ 
    "language_id": 1, 
    "name": "okayt321sd1a" 
} 

업데이트 데이터베이스 :

I 사용자에 따라 데이터가 예를 들어, 입력 업데이트 할 수있는 방법
foreach ($data['product_description'] as $product_description) { 
    foreach ($product_description as $key => $value) { 
     $a[$key] = $value; 

     if($a[$key]){ 
      $this->db->query("UPDATE " . DB_PREFIX . "product_description SET language_id = '" . (int)$language_id . "', name = '" . $this->db->escape(html_entity_decode($product_description['name'])) . "', meta_keyword = '" . $this->db->escape(html_entity_decode($product_description['meta_keyword'])) . "', meta_description = '" . $this->db->escape(html_entity_decode($product_description['meta_description'])) . "', description = '" . $this->db->escape($product_description['description']) . "', tag = '" . $this->db->escape($product_description['tag']) . "', 
            page_title = '" . $this->db->escape($product_description['page_title']) . "', 
            highlight = '" . $this->db->escape($product_description['highlight']) . "', 
            whatbox = '" . $this->db->escape($product_description['whatbox']) . "' WHERE product_id = '" . (int)$product_id . "', 
           "); 
     } 
    } 
} 

, 사용자가 입력하는 경우

"language_id": 1, 
"name": "okayt321sd1a" 

th

"language_id": 1, 
"name": "okayt321sd1a" 
page_title 

다음 난 단지 다른 데이터가 유지됩니다 데이터베이스에이 3 개 데이터를 업데이트 : 만 데이터베이스에이이 데이터를 업데이트 도중 3 데이터를 입력하면 다른 데이터는 유지됩니다.

답변

1

아마도 SQL을 빌드 할 함수를 원할 것입니다. 나는 당신이 PDO 을 사용하고 있다고 가정하고 있습니다 (나도 모르지만,이 예제는 PDO를 사용합니다). 매개 변수/값을 어느 쪽이든 바인딩해야합니다. 맞춤 입력란에 추가하려면 array_merge() 만 사용하면됩니다.

function updateProductDesc($array,$where,$db) 
    { 
     foreach($array as $key => $value) { 
      $sKey   = ":{$key}"; 
      $bind[$sKey] = htmlspecialchars($value); 
      $sql[]   = "`{$key}` = {$sKey}"; 
     } 

     $bind[":where"] = (int) $where; 
     $query = $db->prepare("UPDATE ".DB_PREFIX."product_description SET ".implode(", ",$sql)." WHERE `product_id` = :where"); 
     $query->execute($bind); 
    } 

foreach ($data['product_description'] as $product_description) { 
    foreach ($product_description as $key => $value) { 
     $a[$key] = $value; 
     if($a[$key]){ 
      updateProductDesc($product_description,$product_id,$this->db); 
     } 
    } 
} 
: 원하지 않는 값/키를 제거 할 array_diff() 또는 unset()을 사용할 수 있습니다
관련 문제