Как получить одну строку / данные из Mysql_fetch_array? - PullRequest
0 голосов
/ 03 апреля 2012

Я читаю файл .csv через PHP, используя fgetcsv (). Теперь я могу выбрать чтение данных из файла .csv. Затем мне нужно проверить столбец SKU с моим результатом выборки и, соответственно, выполнить либо вставку, либо обновление. Предположим, что SKU уже присутствует, тогда мне нужно обновить строку в таблице, иначе мне нужно вставить новую запись. Я должен написать следующий код ... Пожалуйста, проверьте, где я делаю ошибку -:

<?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++;   
                } 

    } 
} 
?>

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Если у вас есть фактический индекс 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.

Простая демонстрация здесь .

1 голос
/ 03 апреля 2012

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

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

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

...