Klaus Mock: In Perl SQL-insert/update Abfrage

Beitrag lesen

Hallo,

$db_command = "insert into soll
(
         soll_id,
  soll_monat,
  soll_jahr,
  soll_tage,
  soll_stunden
)
values
(
  1,
  '$monatzaehler',
  '$jahr',
   NULL,
  '@solleingabe[$monatzaehler]'
  )";
$add = $dbh->do($db_command);

in Ermangelung der Tabelledefinition kann ic das so von der Ferne aus nicht ganz nachvollziehen, aber an und für sich schein es in Ordung zu sein.
Aber Du kannst/sollst natürlich das Ergebnis von 'do' auswerten. Wenn die Funktion undef zurückliefert, daann kannst Du mit $dbh->errstr die zugehörige Fehlermeldung des Datenbanksystems abfragen.

Außerdem solltest Du $solleingabe[$monatzaehler] anstelle von @solleingabe[$monatzaehler], außer es ist wirklich ein Array, das Du da ansprichst. Siehe dazu auch perldoc perlfaq4, Frage 'What is the difference between $array[1] and @array[1]?'.

Ach ja, wie ist für Deine Datenbankverbindung die Transaktionslogik eingestellt. Dafür ist das Datenbank-Handle-attribut 'AutoCommit' zuständig, wenn dieses auf 1 gesetzt wird, dann wird jedes Statement, das Du gegen die Datenbank absetzt, auch sofort 'commited', d.h. bestätigt. Andernfalls mußt Du dies mit
$dbh->commit;
manuell erledigen, was aber oft enorme Vorteile hat. Da ich nicht weiß, welche Datenbank Du verwendest, solltest Du die Dokumentation des dazugehörigen DBD-Moduls (also z.B. perldoc DBD::mysql) lesen. Dort ist nämlich auch beschrieben, wie das Attribut standardmäßig eingestellt ist.

Grüße
  Klaus