我需要以某种方式检查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();
}
}
}
答案 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
}