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