Alexander (HH): $dbh->quote() ohne Verbindung

Beitrag lesen

Moin Moin!

es geht um das Modul DBI. Kann man $dbh->quote() benutzen ohne eine Verbindung zur Datenbank zu haben?

Im Normalfall solltest Du $dbh->quote() überhaupt nicht brauchen. Benutze Platzhalter:

  
my $sth=$dbh->prepare('select foo,bar from baz where foo=? or baz=?');  
$sth->execute($fooSoll,$barSoll);  
while ($sth->fetch...) {  
  # ...  
}  
$sth->finish()  

Das Problem ist folgendes: Ich bekomme zu beliebiger Zeit Anfragen, die ich bearbeiten muss und deren Ergebnis ich in einer MySQL-DB speichern will. Die MySQL-DB ist aber täglich ein paar Minuten down wegen Backup.

Kann MySQL kein Backup im laufenden Betrieb? (Nein, ich benutze kein MySQL.)

Meine Überlegung war, dass ich die INSERT-Statements auf jeden Fall aufbaue und falls die DB weg ist, wird das Statement einfach in eine Datei geschrieben. Wenn die DB wieder da ist, lese ich die Datei und führe einfach jedes Statement aus.

Können mehrere Anfragen parallel kommen und in die Datei schreiben wollen (z.B. CGI-Umgebung)? Dann brauchst Du definitiv noch ein Locking für die Datei, sonst hast Du Datenverluste.

Nun benötige ich aber $dbh->quote() um das Statement aufzubauen,

Nein, siehe oben. Geht auch für Insert, ist außerdem performanter:

  
$sth=$dbh->prepare('insert into foo (bar,baz) values(?,?)');  
foreach my $set (qw( a:b c:d e:f g:h )) {  
  my ($bar,$baz)=split /:/,$set;  
  $sth->execute($bar,$baz);  
}  
$sth->finish();  

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".