2012-04-03 4 views
0

Ich lese .csv Datei über PHP mit fgetcsv(). Jetzt kann ich meine Lesedaten aus der CSV-Datei holen. Dann muss ich überprüfen, SKU-Spalte mit meinem fetch-Ergebnis & entsprechend entweder Insertion oder Updation durchführen müssen. Angenommen, die SKU ist dort bereits vorhanden, dann muss ich meine Zeile in der Tabelle aktualisieren, sonst muss ich einen neuen Datensatz einfügen. Ich habe Code schreiben folgende ... Plz n check me sagen, wo ich mistake- tue:Wie man einzelne Reihe/Daten von Mysql_fetch_array holt?

<?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

Haben Sie einen eindeutigen Index für SKU, um Dubletten zu vermeiden? Oder wäre es möglich, einen hinzuzufügen? –

+0

SKU ist einzigartig ... deshalb müssen für vorhandene SKUs aktualisiert werden. – Prat

+0

Was ist der Fehler, den Sie erhalten, wenn Sie es ausführen? – Rocky

Antwort

1

Wenn Sie einen tatsächlichen UNIQUE Index auf Ihrem imoprt_prices Tisch haben, können Sie die ON DUPLICATE KEY UPDATE Syntax verwenden und Ihren Code ein wenig etwas ähnliches vereinfachen; (Beachten Sie, nicht testen, so sehen, als Pseudo-Code)

$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); 
    } 
} 

Sie auch entweder möchten mysql_real_escape_string() oder parametrisierte Abfragen verwenden, um sicherzustellen, dass es keine ' in Ihren obwohl eingefügt Werten. Das ist immer eine Gefahr beim Aufbau von SQL-Strings wie diesem.

Einfache Demo here.

+0

Hallo, wollen Sie UNIQUE Index für ganze Tabelle import_prices oder nur UNIQUE Constraint für SKU Spalte als d. H. Die Spalte, die wir für die Bedingung überprüfen .. – Prat

+0

@ Prat Nur für 'SKU'. Was "ON DUPLICATE KEY UPDATE" tut, versucht zu einfügen, und wenn das Einfügen aufgrund eines eindeutigen Index fehlschlägt (SKU wird dupliziert), aktualisiert es stattdessen die vorhandene Zeile. –

+0

Ja ... Es funktioniert gut ... Danke Joachim :) – Prat

1

Im folgenden Ausschnitt:

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

Sie versuchen, alle Zeilen wiederholt zu aktualisieren , anstatt nur eine einzelne Zeile zu aktualisieren. Dies ist normalerweise in MySQL nicht erlaubt. Sie müssen eine bestimmte unique ID angeben, die aktualisiert werden soll.

+0

Ich überprüfe Condion in If() & dann setze Flag, um Update-Anfrage auszulösen. – Prat