2012-04-03 71 views
0

我正在通過PHP使用fgetcsv()讀取.csv文件。現在我能夠獲取我的意思是從.csv文件讀取數據。 然後我需要檢查SKU列,因此我的提取結果&因此必須執行插入或更新。 假設SKU已經存在,那麼我必須在表中更新我的行,否則我需要插入新記錄。 我寫下面的代碼... PLZ勾選ñ告訴我在哪裏,我在做mistake-:如何從Mysql_fetch_array中獲取單行/數據?

<?php 
$row = 1; 
if (($handle = fopen("localhost/data/htdocs/magento/var/import/Price.csv", "r")) !== FALSE) 
{  
    while (($data = fgetcsv($handle, 8000, ",")) !== FALSE) 
    {   
     $num = count($data);   
     echo "<p> $num fields in line $row: <br /></p>\n";   
     for ($c=0; $c < $num; $c++) 
     {    
      $temp = $data;    
      $string = implode(";", $temp);   
     } 
      $pieces = explode(";", $string);    
      $col1 = $pieces[0]; 
      $col2 = $pieces[1]; 
      $col3 = $pieces[2];  
      $col4 = $pieces[3];    

      $db_name = "magento"; 
         $con = mysql_connect("localhost", "magento", "password"); 
        If (!$con) 
      { 
       die('Could not connect: ' . mysql_error()); 
       mysql_close($con); 
      } 
      $seldb = mysql_select_db($db_name, $con); 

      $query_fetch = "SELECT `sku` from `imoprt_prices`"; 
      $result_fetch = mysql_query($query_fetch); 
      $num_rows = mysql_num_rows($result_fetch); 

      for($i = 0; $i < $num_rows; $i++) 
      { 
       $value = mysql_result($result_fetch, i, 'sku'); 
       if(strcmp('".$value."', '".$col2."') == 0) 
       {    
        $flag = 1; 
        break; 
       } 
       else 
       { 
        $flag = 0; 
         break; 
       } 
      } 
       if($flag == 1) 
       { 
        $query_upadte = "(UPDATE imoprt_prices SET customer_id= '".$col1."', sku ='".$col2."', price= '".$col3."', website= '".$col4."' 
        )"; 
        mysql_query($query_upadte); 
         $row++;   
       } 
       if($flag == 0) 
       { 
        mysql_query("INSERT INTO `imoprt_prices`(`customer_id`,`sku`,`price`,`website`) VALUES('".$col1."','".$col2."','".$col3."','".$col4."')"); 
        $row++; 
       } 

    } 
} 
?> 
+0

您是否有SKU上的唯一索引以避免重複?或者是否可以添加一個? – 2012-04-03 07:08:13

+0

SKU是獨一無二的...這就是爲什麼需要更新現有的SKU .. – Prat 2012-04-03 07:15:13

+0

當你運行它時,你得到的錯誤是什麼? – Rocky 2012-04-03 07:16:48

回答

1

如果您在imoprt_prices表中有實際的UNIQUE索引,那麼可以使用ON DUPLICATE KEY UPDATE語法並將您的代碼稍微簡化爲類似於; (注意,不能測試,所以看到的僞代碼)

$db_name = "magento"; 
$con = mysql_connect("localhost", "magento", "password") or die(mysql_error()); 
$seldb = mysql_select_db($db_name, $con); 

if (($handle = fopen("localhost/data/htdocs/magento/var/import/Price.csv", "r")) !== FALSE) 
{  
    while (($data = fgetcsv($handle, 8000, ",")) !== FALSE) 
    { 
     $col1 = $pieces[0]; 
     $col2 = $pieces[1]; 
     $col3 = $pieces[2];  
     $col4 = $pieces[3]; 

     $query_upadte = "INSERT INTO imoprt_prices (customer_id, sku, price, website) ". 
      "VALUES('".$col1."','".$col2."','".$col3."','".$col4."') ". 
      "ON DUPLICATE KEY UPDATE customer_id='".$col1."', price='".$col3. 
      "',website='".$col4."'"; 
     mysql_query($query_upadte); 
    } 
} 

你可能想要麼mysql_real_escape_string()或使用參數化查詢,以確保有一個在你插入的值沒有'雖然。這對構建像這樣的sql字符串總是有危險。

簡單演示here

+0

嗨,你的意思是爲整個表import_prices設置UNIQUE索引,或者只是爲SKU列設置UNIQUE約束,即我們正在檢查的條件列。 – Prat 2012-04-03 09:52:17

+0

@Prat只適用於'SKU'。 「ON DUPLICATE KEY UPDATE」所做的嘗試是嘗試插入,如果由於唯一索引(SKU被複制)導致插入失敗,它將更新現有的行。 – 2012-04-03 10:07:32

+0

是的......它工作正常......感謝Joachim :) – Prat 2012-04-03 10:42:33

1

在下面的代碼片段:

$query_upadte = "UPDATE imoprt_prices SET customer_id= '".$col1."', sku ='".$col2."', price= '".$col3."', website= '".$col4."'"; 

你試圖重複更新的所有行,而不是隻更新一行。這在MySQL中通常是不允許的。您需要指定要更新的特定unique ID。

+0

我正在檢查If()中的condion然後設置標誌來激發更新查詢。 – Prat 2012-04-03 07:37:38