2010-12-04 9 views
0

Je suis un débutant complet à Perl, avec une expérience de codage PHP et j'ai assemblé ce script Perl pour lire un fichier de données assez volumineux sans caractères EOL et créer un fichier SQL avec des instructions INSERT. Mon problème est que dans le fichier source il y a des "caractères spéciaux" (guillemets simples, par exemple) et à cause de ces caractères je finis avec des requêtes SQL invalides.Ecrire un fichier SQL à partir de Perl

Ma question: existe-t-il un moyen d'échapper des données avant de construire la requête SQL?

Voici le script 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

Il serait probablement plus facile (et plus sûr) d'écrire directement dans la base de données, puis d'effectuer une sauvegarde de base de données dans un fichier si vous souhaitez conserver son contenu. – Ether

Répondre

1

Le seul personnage que vous auriez à vous préoccuper de la citation unique. Vous pouvez le remplacer comme:

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

Une façon plus habituelle est de demander à la bibliothèque de base de données pour l'encodage, comme:

$dbh->quote($thestring); 

Mais puisque vous écrivez à un fichier, vous n » t semblent avoir une bibliothèque de base de données autour.

+0

Nous vous remercions de votre aide! – ecstrim

Questions connexes