Я пытаюсь вставить значения в таблицу MySQL
по строке, которая считывается из файла в Perl
. Если какое-либо поле пусто в CSV-файле, будут две последовательные запятые. Например.Вставка Mysql с значениями, содержащими двойные запятые
Firstname,Lastname,Code,Phone,Email
fname1,lname1,123,34543,[email protected]
fname2,lname2,344,45645,[email protected]
fname3,lname3,454,,[email protected]
В третьей строке нет номера телефона. Итак, есть две последовательные запятые. Когда мы пытаемся вставить в mysql следующую команду, она терпит неудачу.
insert into table1 (Firstname,Lastname,Code,Phone,Email) values (fname3,lname3,454,,[email protected])
Как это сделать?
Я использовал следующий код, чтобы сделать это.
open CSV, $file or die $!;
my @csv_content = <CSV>;
close CSV;
my $fields = "Firstname,Lastname,Code,Phone,Email";
my $table = "table1";
my $csv = Text::CSV->new();
foreach(@csv_content){
if($csv->parse($_)){
my @values = $csv->fields();
my $status = $csv->combine(@values);
my $line = $csv->string();
$statement = "INSERT INTO $table($fields) VALUES($line);";
$sth = $dbh->prepare($statement);
$sth->execute() or die "$! $DBI::errstr";
}
}
MySQL может загружать CSV непосредственно с синтаксисом LOAD DATA INFILE. Я бы рекомендовал использовать это, если вам не нужно предварительно обработать ваш CSV. – ThisSuitIsBlackNot
Мне нужно предварительно обработать csv, так что это не вариант. – Prabhu
1/Использовать точки привязки в вашем SQL. 2/'prepare()' SQL за пределами цикла (второй пункт не решает вашу проблему - это повышает эффективность вашего кода). –