2010-12-04 3 views
0

Я полный новичок Perl с опытом программирования PHP, и я собрал этот скрипт Perl для чтения довольно большого файла данных без символов EOL и создания SQL-файла с инструкциями INSERT. Моя проблема заключается в том, что в исходном файле есть «специальные символы» (например, одна кавычка), и из-за этих символов я заканчиваю недопустимыми SQL-запросами.Написание файла SQL из Perl

Мой вопрос: есть ли способ избежать данных перед созданием SQL-запроса?

Вот сценарий Perl:

#! /usr/bin/perl 
use strict; 
use warnings; 

my $filename = "foo.dat"; 
my $buf = ""; 

open (MYFILE, '>data.sql'); 

open(my $fh, "<", $filename) or die $!; 
while(read($fh, $buf, 80)) { 
    if (defined $buf && length $buf > 2) { 
     my $aa = substr $buf, 0, 2; 
     my $bb = substr $buf, 2, 1; 
     my $cc = substr $buf, 3; 

     print MYFILE "INSERT INTO foo (aa, bb, cc) VALUES ('".$aa."', '".$bb."', '".$cc."')\n"; 
    } 
} 

close (MYFILE); 
+0

Возможно, было бы проще (и более безопасно) писать непосредственно в БД, а затем выполнить резервное копирование базы данных в файл, если вы хотите сохранить его содержимое. – Ether 2010-12-06 18:28:02

ответ

1

Единственный символ, который вы должны были бы беспокоиться о том, одиночная кавычка. Вы можете заменить это нравится:

$aa =~ s/'/''/g; 

Более обычный способ попросить библиотеку базы данных, чтобы сделать кодировку, например:

$dbh->quote($thestring); 

Но так как вы пишете в файл, вы не» t, похоже, есть библиотека базы данных.

+0

Благодарим за помощь! – ecstrim 2010-12-04 11:53:29

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