2014-09-01 106 views
0

我需要以某種方式檢查字段是否存在於數據庫中,如果存在,只需更新價格,如果不存在,則插入字段。我正在使用simplxml從xml解析數據到db。如果數據庫中存在字段,則更新價格else插入全部

這裏是我沒有if語句的代碼,只需插入兩個數據庫。

我需要從數據庫products如果ident存在檢查,因此,如果不存在,做所有的代碼了,如果存在只在數據庫更新priceproducts

foreach ($lib->product as $data) { 
    $manufacturer = (string) $data->manufacturer; 
    $ident = (string) $data->id; 
    $name = (string) $data->name; 
    $category = (string) $data->category; 
    $subcategory = (string) $data->subcategory; 
    $price = (int) ($data->price * 1.2 * 1.4 * 1.1); 
    $image = (string) $data->images->image[0]; 


    $insert = $db->prepare('INSERT INTO products (ident, manufacturer,name,category,subcategory,price,image) VALUES (?, ?, ?, ?, ?, ?, ?)'); 
    $insert->bind_param('sssssss', $ident, $manufacturer, $name, $category, $subcategory, $price, $image); 
    $insert->execute(); 


    foreach($data->specifications->attribute_group as $group) { 
     $attribute_group = (string) $group->attributes()['name']; 

     foreach($group as $attr) { 
      $attribute = (string) $attr->attributes()['name']; 
      $value = (string) $attr->value; 
      $insert = $db->prepare('INSERT INTO spec (attr_group,attr_name, attr_value, product_id) VALUES (?, ?, ?, ?)'); 
      $insert->bind_param('ssss', $attribute_group, $attribute, $value, $ident); 
      $insert->execute(); 

     } 

    } 

}

回答

1

要在一個做查詢,查找INSERT的MySQL的ON DUPLICATE KEY UPDATE功能。

如果你使用PDO$insert->affected_rows的mysqli然後使用$insert->rowCount()

如果第一次插入嘗試已經插入存在並更新價值的關鍵,那麼rowCount()/affected_rows將;如果它只是插入一條記錄,那麼rowCount()/affected_rows將是。如果INSERT不成功,它將是。

例如爲PDO

switch($insert->rowCount()) { 
    case 2: // UPDATE occurred thanks to 'ON DUPLICATE UPDATE KEY' 
     // SOME CODE HERE IF YOU LIKE 
     break; 
    case 1: // INSERT occurred as no duplicate 
     // CODE TO INSERT INTO SECOND TABLE 
     break; 
    case 0: 
    default: 
     // NEITHER THE ABOVE OCCURRED SO CODE TO HANDLE ERROR 
} 
+0

好了,這對錶「產品」工作,但我還有一個循環表「規範」,其中「的ident」不能是唯一的,因爲它是reapating。我需要以某種方式當在桌子'產品'鑑定重複,然後對'規格'表做任何事情 – gandrap 2014-09-01 08:36:10

+0

是否有列將是唯一的組合?如果是這樣,您可以在2列或更多列上設置UNIQUE索引。 – 2014-09-01 08:38:12

+0

更好地理解你的表格將有助於回答。你可以編輯你的問題或創建一個sqlfiddle.com並在這裏提供一個鏈接到它 – 2014-09-01 08:40:58

0
 $query = "SELECT * name FROM yourtable"; 
     $bool = true; 
      if($r = @mysql_query($query)) 
      { 
       while($row = @mysql_fetch_array($r)) 
       { 
        if(($row['id'] == $id)) 
        { 
         $bool = false; 
         break; 
        } 
       }    
      } 

      if($bool) { 
       UPDATE 
      } 
      else 
      { 
       INSERT 
      } 
+0

我試過這個代碼,但價格總是最後一個,它不會更新,因爲它應該。你能看到我的代碼,然後寫下你的代碼,我不確定我是否做對了。thx – gandrap 2014-09-01 09:07:47

+0

你是什麼意思'價格總是最後一個' – 2014-09-01 09:11:05

+0

我看到你的代碼,我看到你試圖插入與7欄bind_param與8列 – 2014-09-01 09:12:40

相關問題