PHP / MySQL:如果不存在则插入其他更新

时间:2012-11-15 13:28:48

标签: php mysql csv

  

可能重复:
  create a mysql record if it doesnt exist, else update it

我创建了一些PHP,它从CSV中获取数据并更新数据库表以匹配CSV的数据。

我的下一个任务是,根据唯一列(sku)检查记录是否存在。如果确实存在,则根据更改更新数据库表。 否则,如果该SKU列不匹配,则执行INSERT。

我目前获得的代码运行,但我遇到的问题是,如果创建了一个新项目,它似乎通过已有的记录运行更新。

我的代码可以在Pastebin

找到

或者也在这里......

<?php

$con = mysql_connect("localhost", "root", "");

if(!$con)
{
 die('Could not connect' . mysql_error());
}

mysql_select_db("db_lemonstand", $con);

class csvIterator extends LimitIterator
{
public function __construct($path)
{
    $csv = new SplFileObject($path);
    $csv->setFlags(SplFileObject::READ_CSV);
    parent::__construct($csv, 1);
}
}
 foreach (new csvIterator('data/catalogue.csv') as $entry) {

$name = $entry[23];

/* Replace Strings To Make URL Name */
$search_array = array(" ", "/", "+");
$replace_array = array("-");
$url_name = strtolower($name);
$url_name = str_replace($search_array, $replace_array, $url_name);

$long_desc = $entry[9];
$short_desc = $entry[23];
$manufacturer = $entry[11];
$price = $entry[15];
$sku = $entry[2];
$weight = $entry[29];
$width = $entry[30];
$height = $entry[5];
$enabled = '1';
$created_at = date('Y-m-d H:i:s');
$product_type_id = '1';
$tax_class_id = '1';

echo '<pre>';
print_r($entry);
echo '</pre>';

// Check see if products' SLU already exists or not
$product_exists = "SELECT sku FROM shop_products WHERE sku = '$sku'";
$result = mysql_query($product_exists, $con);

$exists = mysql_num_rows($result);

if($exists == 0 )
{
    $insert = "INSERT INTO shop_products (name, description, short_description, url_name, price, sku, weight, width, height, enabled, created_at, tax_class_id, product_type_id) VALUES ('$name', '$long_desc', '$short_desc', '$url_name', '$price', '$sku', '$weight', '$width', '$height', '$enabled', '$created_at', '$tax_class_id', '$product_type_id')";
    $insert_data = mysql_query($insert, $con);
}
else
{
    $update = "UPDATE shop_products SET name = '$name', description = '$long_desc', short_description = '$short_desc', url_name = '$url_name', price = '$price', sku = '$sku', weight = '$weight', height = '$height', enabled = '$enabled', created_at = '$created_at', tax_class_id = '$tax_class_id', product_type_id = '$product_type_id'";
    $update_data = mysql_query($update, $con);

    if (!mysql_query($update,$con))
    {
        die('Error: ' . mysql_error());
    }
}

}

3 个答案:

答案 0 :(得分:3)

您可以使用

INSERT INTO mytable on DUPLICATE KEY UPDATE...

答案 1 :(得分:2)

您必须为表格(一个或多个字段)设置唯一键,并且您可以使用此功能。 在我的例子中,我有唯一的密钥(模板,日期)

$sql = 'INSERT INTO myTable
        (`template`,`date`,`count`) VALUES
        ("' . $template . '","' . $curDate . '", 1)
        ON DUPLICATE KEY UPDATE count = count + 1';

答案 2 :(得分:2)

存储将var中的字段存储为$字段或您想要的任何其他内容,并执行此查询,因为您需要一个字段作为参考,这就是我包含$ Id

的原因

INSERT INTO table_name SET id ='$ Id',$ fields ON DUPLICATE KEY UPDATE $ fields

相关问题