Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Импорт из CSV в базу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
kikosik666
Отправлено: 10 Августа, 2017 - 16:10:02
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Здравствуйте, у меня такая проблема. Код импортирует данные CSV файла в таблицу на базе. Каждая строка CSV составляет из 7 данных которые разделены запятыми.

Например

CHECKID,NAME,SURNAME,MIDDLENAME,POSITION,WORKPLACE,WORKTIME
14877,Ivan,Petrov,Aleksandrovich,Acountant,Office,9 hour


Каждый день импортируется новый CSV файл и в каждом файле CHECKID может повтарится. Как сделать чтобы код проверял в базе и в CSV файле, если в таблице(база) уже есть такой CHECKID он не импортировал данную страку из CSV файла, а все остальные строки импортировал? То есть если есть в базе такой запись - 14877, он не импортировал строку из CSV)

Заранее спасибо))

Вот код.

<?php
error_reporting(0); // Выключаем показ ошибок. Чтобы их видеть - вместо 0 поставьте E_ALL
include('db_conn.php');
$max_file_size = 5; // Максимальный размер файла в МегаБайтах
if($_POST['update']=='OK'){
// СТАРТ Загрузка файла на сервер
if($_FILES["filename"]["size"] > $max_file_size*1024*1024){
echo 'Размер файла превышает '.$max_file_size.' Мб!';
include('form_file_load.php');
exit;
}
if(copy($_FILES["filename"]["tmp_name"],$path.$_FILES["filename"]["name"])){
echo("Добавлен "."<b>".$_FILES["filename"]["name"]."</b>"." !<br />");
}
else{
echo 'Errorլ<br>';
include('form_file_load.php');
exit;
}

$file = fopen('php://memory', 'w+');
fwrite($file, iconv('UTF-8', 'UTF-8', file_get_contents($_FILES["filename"]["name"])));
rewind($file);


$r = 1;
while (($row = fgetcsv($file, 1000, ",")) != FALSE) {
$r++;
if($r == 2) {continue;} // Не дает записать в БД Заголовки Прайс-листа
$ins="INSERT INTO `Table1` (`CHECKID`,`NAME`,`SURNAME`,`MIDDLENAME`, `POSITION`, `WORKPLACE`,`WORKTIME`
)VALUES('$row[0]','$row[1]','$row[2]', '$row[3]', '$row[4]', '$row[5]', '$row[6]', '$row[7]' )";
$query = mysql_query($ins);
if(!$query) die('Error!!!');
}
fclose($file);
echo 'Refresh page - '.$r;
header('Location: my_panel.php');

}
else{
include('form_file_load.php');
}
?>
 
 Top
andrewkard
Отправлено: 10 Августа, 2017 - 16:22:02
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Установите эту колонку как уникальный ключ. При заливке INSERT IGNORE

либо перед заливкой сделайте запрос на выборку всех CHECKID,

вытащите все строки которые нужно, сформируйте один большой запрос и вставьте в БД.

При работе с БД лучше использовать prepared_statements

https://www[dot]w3schools[dot]com/php/ph[dot][dot][dot]d_statements[dot]asp
 
 Top
kikosik666
Отправлено: 10 Августа, 2017 - 16:45:52
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Тоесть если напишу Insert Ignore, вопрос будет решен?

Так?

$ins="INSERT IGNORE INTO `Table1` (`CHECKID`,`NAME`,`SURNAME`,`MIDDLENAME`, `POSITION`, `WORKPLACE`,`WORKTIME`
)VALUES('$row[0]','$row[1]','$row[2]', '$row[3]', '$row[4]', '$row[5]', '$row[6]', '$row[7]' )";





andrewkard пишет:
Установите эту колонку как уникальный ключ. При заливке INSERT IGNORE

либо перед заливкой сделайте запрос на выборку всех CHECKID,

вытащите все строки которые нужно, сформируйте один большой запрос и вставьте в БД.

При работе с БД лучше использовать prepared_statements

https://www.w3schools.com/php/php_mysql_prepared_statements.asp
 
 Top
andrewkard
Отправлено: 11 Августа, 2017 - 16:41:32
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




kikosik666 пишет:
Тоесть если напишу Insert Ignore, вопрос будет решен?

если к этой колонке применить unique-key
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB