2015-08-27 4 views
0

У меня есть куча DOI, разделенных '\n' в * .txt-файле. Perl-скрипт, который я написал, должен читать каждую строку файла и выполнять запрос select. Однако программа не может выполнить SQL-запрос. Не могли бы вы помочь мне решить проблему?Невозможно выполнить SQL-запросы

После выполнения я получаю следующее сообщение об ошибке:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' http://dx.doi.org/10.1002/1521-3757(20001103)112:21 <3947::aid-ange3947>3.0'

Первая строка файла dois.txt содержит следующую DOI:

`http://dx.doi.org/10.1002/1521-3757(20001103)112:21<3947::aid-ange3947>3.0.co;2-k` 

Вот мой код:

my $file = 'dois.txt'; 

open(my $fh, '<:encoding(UTF-8)', $file) 
    or die " Could not open file $file"; 
while (my $doi = <$fh>) { 

chomp($doi); 
my $sth = $dbh->prepare("select * from mytable where doi = ''$doi'';"); 
$sth->execute || die "failed to execute:\n ", $DBI::Errstr; 
print $sth->fetchrow_array, "\n"; 

} 
close FH; 
$dbh->disconnect; 
+0

создать строку и опубликовать ее из '" select * from mytable, где doi = '' $ doi ''; "' – Drew

ответ

2

Вы хотите позвонить prepare за пределы цикла, чтобы план выполнения должен был быть рассчитан (то есть быстрее). Кроме того, в дополнение к подготовке только одного запроса, вам не нужно правильно определять, как правильно указывать значения, если вы используете placeholders/bind parameters.

my $file = 'dois.txt'; 

open(my $fh, '<:encoding(UTF-8)', $file) or die "Could not open file $file: $!\n"; 
my $sth = $dbh->prepare(q{select * from mytable where doi = ?}); 

while (my $doi = <$fh>) { 
    chomp($doi);  
    $sth->execute($doi) || die "failed to execute:\n ", $DBI::Errstr; 
    print $sth->fetchrow_array, "\n"; 
} 

close $fh; 
$dbh->disconnect; 
Смежные вопросы