[perl][sql] @mail adressen in sql query

Pagina: 1
Acties:

  • sharkzor
  • Registratie: Maart 2000
  • Laatst online: 19-05 14:22
dmv een sql query wil ik o.a. een mail adres in een database wegschrijven. deze komt uit een andere database, dus komt vanuit een variabele en worden 1 voor 1 met een loopje weggeschreven.
probleem is alleen dat perl mail@provider.com wegschrijft als mail.com. waarschijnlijk door de @ die staat voor een array. ik weet dat ik dit dan escapen door een \ voor de @ te zetten, maar dat gaat niet zo makkelijk als het vanuit een var komt.
heb ook al verschillende combo's ", ' en ` geprobeerd, maar nogsteeds krijg ik dit...

hoe los ik dit op? het lijkt me een veel voorkomend probleem, maar de search en google geven niet veel terug > ("perl email") ("perl email sql") etc..

volgende is een voorbeeld van hoe het ongeveer gaat worden, alleen word dan alles uit een andere database gevist

code:
1
2
3
4
5
6
7
8
9
$mail = "mail@provider.com";
$SqlStatement = "INSERT INTO `relaties` (`relnummer`, `dc`, `grootboekreknr`,
 `zoekcode`, `naam1`, `adres`, `postcode`, `woonplaats`, `postadres`,
 `postpostcode`, `postwoonplaats`, `telefoon`, `telefax`, `email`, `bank1`, 
`bank2`, `btwnummer`, `btwcode`, `verificatiedatum`, `incassocode`, 
`mobiel`, `land`) VALUES 
('3', 'd', '100', '3', 'sukkel', 'ergens', '1234bv', 'lala', 'ergensanders', '3214bz', 'dus', '0
30123456', '03055555', '$mail', '98875562', '545857', 'ONBEKEND', '0', '10-11-2004 
9:16:58', '0', '06123456', 'NL')";

[ Voor 14% gewijzigd door sharkzor op 10-11-2004 16:21 ]


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
\@ gebruiken.
De @ escapen dus.

Verwijderd

sharkzor schreef op 10 november 2004 @ 16:16:
code:
1
$mail = "mail@provider.com";
moet zijn:
code:
1
$mail = "mail\@provider.com";

of
code:
1
$mail = 'mail@provider.com';

  • sharkzor
  • Registratie: Maart 2000
  • Laatst online: 19-05 14:22
Verwijderd schreef op 10 november 2004 @ 16:27:
[...]

moet zijn:
code:
1
$mail = "mail\@provider.com";

of
code:
1
$mail = 'mail@provider.com';
dat snap ik en gaf ik ook aan. (lezen!!)
maar stel, je moet het uit een array halen, hoe stamp je dan dynamisch die \ ervoor?

Verwijderd

Probeer het eens met deze SQL methode:

code:
1
2
3
4
5
6
7
$mail = 'mail@provider.com';
$SqlStatement = 'INSERT INTO `relaties` (`telefax`, `email`, `bank1`) VALUES 
( ?,?,?)';
my $dbh = DBI->connect ...; # connecten
my $sth2 = $dbh->prepare($SqlStatement) or return 0; # or error handling
$sth2->execute( '0123', $mail, '456' ) or return 0; # soms niet!
$sth2->finish; #opruimen

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 15-05 19:40
Perl quotemeta functie gebruiken?

Of zelf een functie schrijven die chars vervangt:

code:
1
2
3
4
5
sub sql_prep()
{  $str = shift;
    $str =~ s/\@/\\\@/g;
    return $str;
}


aanroepen met: $sql_mail = sql_prep('bla@blaat.com');

//Edit:
owkee, ff vergeten... Deze slikt een heel array in 1x

code:
1
2
3
4
5
6
7
8
sub sql_prep()
{  @tmp = ();
   while($str = shift)
   {  $str =~ s/\@/\\\@/g;
       push @tmp, $str;
   }
   return @tmp;
}


Zelfde aanroep maar dan @array erin stoppen. De code kan nog wat netter, en eventueel kun je "by reference" de argumenten meegeven, maar dat laat ik aan je eigen fantasie over.

Suc6!

[ Voor 131% gewijzigd door Morrar op 12-11-2004 02:30 ]

Pagina: 1