2015-06-30 5 views
0

Привет, Ive играл со следующим кодом для импорта CSV-файла. Как положить его в такое, что оноphp создать еще один файл csv от

  1. Проверяет, существует ли запись.
  2. Обновить запись, если необходимо.
  3. Создайте новую запись, если она не существует.
  4. Создайте новый файл csv с информацией о любых дополнительных записях или обновлениях. Благодаря

    <?php 
    
        $connect = mysql_connect('localhost','root','12345'); 
        if (!$connect) { 
        die('Could not connect to MySQL: ' . mysql_error()); 
        } 
    
        $cid =mysql_select_db('test',$connect); 
        // supply your database name 
    
        define('CSV_PATH','C:/wamp/www/csvfile/'); 
        // path where your CSV file is located 
    
        $csv_file = CSV_PATH . "infotuts.csv"; // Name of your CSV file 
        $csvfile = fopen($csv_file, 'r'); 
        $theData = fgets($csvfile); 
        $i = 0; 
        while (!feof($csvfile)) { 
        $csv_data[] = fgets($csvfile, 1024); 
        $csv_array = explode(",", $csv_data[$i]); 
        $insert_csv = array(); 
        $insert_csv['ID'] = $csv_array[0]; 
        $insert_csv['name'] = $csv_array[1]; 
        $insert_csv['email'] = $csv_array[2]; 
        $query = "INSERT INTO csvdata(ID,name,email) 
        VALUES('','".$insert_csv['name']."','".$insert_csv['email']."')"; 
        $n=mysql_query($query, $connect); 
        $i++; 
        } 
        fclose($csvfile); 
    
        echo "File data successfully imported to database!!"; 
        mysql_close($connect); 
        ?> 
    
+0

Вы его прямо в вашем вопросе. Сначала проверьте, существует ли запись. Если он не вставляет его. Если да, проверьте, нужно ли обновлять. Если да, обновите его. – kainaw

ответ

1

Для вопросы 1 до 3: использовать "upsert", в MySQL:

$query = "INSERT INTO csvdata (id,name,email) 
    VALUES ('".$insert_csv['ID']."','".$insert_csv['name']."','".$insert_csv['email']."') 
    ON DUPLICATE KEY UPDATE name='".$insert_csv['name']."', email='".$insert_csv['email']."';"; 

Это будет вставить recored в базе данных, если ключ не дублируется (в этом случае, я полагаю, ваш первичный ключ «ID). http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

для вашего вопроса не 4, используйте mysql_affected_rows (http://php.net/manual/en/function.mysql-affected-rows.php)

Если он возвращает значение выше 0, что-то было вставлено/обновлено. Затем вы можете записать значение в отдельном массиве и записать его в новый CSV в конце.

$fh = fopen('altered_rows.csv', 'w'); 
[...] 
$n=mysql_query($query, $connect); 
$affected_rows = mysql_affected_rows($connect); 
if($affected_rows>0) fputcsv($fh, $insert_csv); 
[...] 
fclose($fh); 

http://php.net/manual/en/function.fputcsv.php

+1

, попробуйте использовать расширение PDO или mysqli. mysql lib, который вы используете, устарел в php. –

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