如果数据库中存在字段,则更新价格,否则插入全部

时间:2014-09-01 07:58:38

标签: php mysql simplexml

我需要以某种方式检查db中是否存在字段,然后如果存在,只需更新价格,如果不存在,则插入字段。我使用simplxml从xml解析数据到db。

这是我的代码没有if语句,只是插入两个数据库。

如果products存在,我需要从db ident进行检查,如果不存在,请执行所有代码,如果存在则只更新db price中的products < / p>

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();

        }

    }

}

2 个答案:

答案 0 :(得分:1)

要在一个查询中执行,请查找MySQL ON DUPLICATE KEY UPDATE INSERT的{​​{1}}功能。

如果您使用 PDO $insert->rowCount() mysqli ,请使用$insert->affected_rows

如果第一个插入尝试插入已存在的密钥并更新值,则rowCount()/affected_rows 2 ;如果它只是插入了一条记录,那么rowCount()/affected_rows 1 。如果INSERT不成功,则 0

e.g。对于 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
}

答案 1 :(得分: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
            }