2016-03-30 38 views
0

嗨我目前有这个PHP文件,每次触发时都会将csv数据导入到mysql数据库中,但是我希望它覆盖数据库中的当前数据,而不是每次触发时添加它。这里是文件减我的细节:用PHP上传到MYSQL的CSV

<?php 

//database connection details 
$connect = mysql_connect('mydetails','mydetails','mydetails'); 

if (!$connect) { 
die('Could not connect to MySQL: ' . mysql_error()); 
} 

//your database name 
$cid =mysql_select_db('mydetails',$connect); 

// path where your CSV file is located 
define('CSV_PATH','myfile location'); 

// Name of your CSV file 
$csv_file = CSV_PATH . "my file"; 


if (($handle = fopen($csv_file, "r")) !== FALSE) { 
    fgetcsv($handle); 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $num = count($data); 
    for ($c=0; $c < $num; $c++) { 
     $col[$c] = $data[$c]; 
    } 

$col1 = $col[0]; 
$col2 = $col[1]; 
$col3 = $col[2]; 
$col4 = $col[3]; 

// SQL Query to insert data into DataBase 
$query = "INSERT INTO  orders(OrderNumber,OrderCustomer,OrderReqdQty,OrderStatus)  VALUES('".$col1."','".$col2."','".$col3."','".$col4."')"; 
$s  = mysql_query($query, $connect); 
    } 
    fclose($handle); 
} 

echo "File data successfully imported to database!!"; 
mysql_close($connect); 
?> 
+0

TODO: 1.检查'OrderNumber'如果它存在于你的数据库 2.如果存在的话做一个UPDATE语句 3.如果不存在这样做和INSERT语句 –

+0

<插入强制**不使用mysql驱动程序,它的死**消息在这里> – DevDonkey

回答

1

看来,你有独特的OrderNumber。为表添加适当的密钥并使用ON DUPLICATE UPDATE语法。

更多关于这个话题在这里:http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

---编辑--- 首先,你需要添加正确的唯一关键在你的餐桌:

ALTER TABLE orders add UNIQUE(OrderNumber); 

这个查询应该添加独特的键,然后从现在没有重复的OrderNumber可能。如果数据库中有任何此查询将在您的脸上抛出适当的错误信息。如果您只是尝试添加具有相同OrderNumber的其他条目,则您也会受到错误消息的欢迎。

现在你像这样修改你的脚本:

INSERT INTO orders(OrderNumber, OrderCustomer, OrderReqdQty, OrderStatus) VALUES('".$col1."','".$col2."','".$col3."','".$col4."') ON DUPLICATE KEY UPDATE OrderCustomer='".$col2."', OrderReqdQty='".$col3."', OrderStatus='".$col4."'"; 

然后每次订单号码是表中发现的,而不是抛出一个错误,就会出现这个很行执行UPDATE。

+0

我对此很新,你会介意在上面的代码中展示如何实现这一点。我有正确的数据库表,因为PHP文件正在工作,但就像我说它只是不断添加/复制信息而不覆盖它。预先感谢大家:) – bigmacca1980