Thomas: Apache-Logeinträge unterdrücken?

Beitrag lesen

Wenn Du mit DBI arbeitest, dann solltest Du Dir die Attribute PrintError bzw. PrintWarn ansehen, die es u.a. beim Database-Handle gibt. Allenfalls ist auch RaiseError von Interesse.

RaiseError brauch ich schon, damit das script nicht abschmiert.
hier der spameintrag:
myscript.cgi: DBD::mysql::db do failed: Duplicate entry 'id-6' for key 1 at ../mymodule.pm line 597.

das mit den attributen könnte hilfreich sein. wo finde ich da eine beschreibung? im dbi-modul wird nur von RaiseError geschrieben :(

Aber da Du ja nicht genau sagst, wie Du das gemacht hast (Code-Schnipsel), ist das alles nur eine Herumraterei.

#--------------------------------------------------------------------------------

db_lock

#--------------------------------------------------------------------------------
sub db_lock
{
    my $tabelle = shift;
    my $wert    = shift;
    my $check   = shift;

local $dbh->{RaiseError};
    my $statement = "insert into lhb_lock
                     (tabelle,    wert,    id,  datneu)
                     values
                     ('$tabelle', '$wert', $id, SYSDATE())";

my $rv = $dbh->do($statement);
    return $rv if $rv || defined($check);

my $time1 = time() + 180;
    my $count = 0;
    until ($rv || ($time1 < time()))
        {
        $count++;
        sleep(0.1 * $count**1.5);
        $rv = $dbh->do($statement);
        }

unless ($rv)
        {
        dblog("Fehler beim locken von $tabelle $wert", 1);
        get_tmpl('dummy');
        $html->param(text => 'Es ist ein schwerwiegender Fehler aufgetreten!');
        end_script;
        #stop_all(1, "Wegen technischen Problemen");
        }
}

#--------------------------------------------------------------------------------

db_unlock

#--------------------------------------------------------------------------------
sub db_unlock
{
    my $tabelle = shift;
    my $wert    = shift;

$dbh->do("delete from lhb_lock where tabelle = '$tabelle' and wert = '$wert'");
}