2012-04-03 4 views
0

Я читаю CSV-файл через PHP, используя fgetcsv(). Теперь я могу получить, я имею в виду чтение данных из 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, чтобы избежать дубликатов? Или можно было бы добавить его? –

+0

SKU уникален ... вот почему нужно обновлять существующие SKU .. – Prat

+0

Какая ошибка вы получаете при запуске? – Rocky

ответ

1

Если у вас есть фактический индекс UNIQUE на вашей таблице imoprt_prices, вы можете использовать синтаксис 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

Привет, У U означает установить индекс UNIQUE для целых таблиц import_prices или просто УНИКАЛЬНОЕ ограничение для столбца SKU, то есть столбца, который мы проверяем для условия. – Prat

+0

@Prat Только для 'SKU'. Что делает «ON DUPLICATE KEY UPDATE», это попытка вставить, и если вставка завершилась неудачей из-за уникального индекса (дублирующийся код), он вместо этого обновляет существующую строку. –

+0

Да ... Он отлично работает ... Спасибо Joachim :) – Prat

1

В следующем фрагменте:

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

Вы пытаетесь обновить все строки несколько раз , вместо того, чтобы просто обновлять одну строку. Обычно это не допускается в MySQL. Вам необходимо указать конкретный unique ID, который необходимо обновить.

+0

Я проверяю condion в флажке If() и then, чтобы активировать запрос обновления. – Prat

Смежные вопросы