2014-09-01 144 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

相关问题