2010-12-04 9 views
0

Ich bin ein kompletter Neuling für Perl, mit PHP-Programmiererfahrung und ich habe dieses Perl-Skript zusammengestellt, um eine ziemlich große Datendatei ohne EOL-Zeichen zu lesen und eine SQL-Datei mit INSERT-Anweisungen zu erstellen. Mein Problem ist, dass es in der Quelldatei "spezielle Zeichen" (z. B. ein einfaches Anführungszeichen) gibt und ich aufgrund dieser Zeichen ungültige SQL-Abfragen erhalte.Schreiben einer SQL-Datei aus Perl

Meine Frage: Gibt es eine Möglichkeit, Daten vor dem Erstellen der SQL-Abfrage zu entkommen?

Hier ist der Perl-Skript:

#! /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

Es wäre wahrscheinlich einfacher (und sicherer), direkt in die Datenbank zu schreiben und dann einen DB-Dump in eine Datei auszuführen, wenn Sie den Inhalt beibehalten möchten. – Ether

Antwort

1

Das einzige Zeichen, das Sie zu befürchten haben würden, ist das Apostroph. Sie können es mögen ersetzen:

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

Ein üblicher Weg, um die Datenbankbibliothek zu bitten, die Codierung zu tun, wie:

$dbh->quote($thestring); 

Aber da Sie in eine Datei schreiben, Sie don‘ Es scheint, als hätten Sie eine Datenbankbibliothek.

+0

Vielen Dank für Ihre Hilfe! – ecstrim

Verwandte Themen