Использование LOAD DATA INFILE в perl для вставки значений в MYSQL - PullRequest
4 голосов
/ 03 августа 2011

Я пытаюсь загрузить файл CSV в базу данных mysql, используя perl.Мой Perl-скрипт будет находиться на сервере, к которому я буду обращаться через мой браузер.В браузере будет возможность загрузить файл.

Вопрос в том, как именно я это сделаю

  1. Нужно ли сохранять этот файл где-нибудь на сервере?и затем использовать его?
  2. Можно ли напрямую использовать файл с моего ноутбука, указав фиксированный путь?

, пока я пытался сделать это

if($update eq "fullLoad"){
$filename =  param("customPricing");


my $upload_filehandle = upload("customPricing"); 
open ( UPLOADFILE, ">$filename" ) or die "$!"; 

binmode UPLOADFILE; 
while ( <$upload_filehandle> )
{
    print UPLOADFILE; 
} 
close UPLOADFILE; 


$query = "LOAD DATA INFILE '\bigmac\bm_src\html\cgi-bin\testbrocade\$filename' INTO TABLE customPricingTest FIELDS TERMINATED BY ','";
$sth = $dbh->do($query) or die "SQL Error: $DBI::errstr\n"; 

print $sth . "Records Uploaded <br/>";

}

Отредактировано -> Выше кода выдает ошибку Доступ запрещен для пользователя.Я успешно могу создать файл на сервере, но похоже, что получаю ошибку при доступе к нему .. Есть идеи?

Спасибо, Nitesh

1 Ответ

1 голос
/ 03 августа 2011

В ответ на вопрос 1: если вы используете LOAD DATA INFILE, да, файл должен быть доступен для системы сервера и пользователя базы данных. Если вы используете LOAD DATA LOCAL INFILE, файл может оставаться в отдельной системе, запускаться сценарием Perl, и данные загружаются в сетевое соединение. Между ними есть различия в разрешениях и настройках, но производительность в любом случае очень хорошая, и мы не увидели огромной разницы при локальной или удаленной загрузке данных.

Для второго вопроса, это то, для чего LOAD DATA LOCAL INFILE. Здесь, поскольку файл читается и передается через соединение DBI, путь к файлу должен быть относительно места выполнения сценария. Он не должен быть абсолютным, как это было бы для LOAD DATA INFILE. Это даже не должно быть фиксированным путем. Для этой цели мы успешно использовали временные файлы, если они не удаляются до тех пор, пока вы не отключитесь от базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...