2012-04-03 72 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