juha: SQL-Insert-Anweisung

Hallo Zusammen

Diese Frage stellte ich bereits einmal, man sagte diese insert-Anweisung wäre untauglich in meinem Perl-Programm, doch wieso funktioniert es weiter unten im Programm?

Dieser Code funktioniert:

Stempelung in Datenbank eintragen

$db_command = "insert into ajbatch
(
        adr_id,
 ajdef_id,
 ajbatch_datum,
 ajbatch_zeit
)
values (
 $schluss,
 1,
 now(),
        '$time'
 )";

$add = $dbh->do($db_command);

Warum funktioniert folgender nicht??

#Änderung in Datenbank eintragen
$db_command = "insert into ajsoll
(
        ajsoll_id,
 ajsoll_monat,
 ajsoll_jahr,
 ajsoll_tage,
 ajsoll_stunden
)
values
(
 1,
 '$monatzaehler',
 '$jahr',
 NULL,
 '@solleingabe[$monatzaehler]'
)";
$add = $dbh->do($db_command);

grüsse juha

  1. Hallo,

    $add = $dbh->do($db_command);

    Naja, Glaskugel habe ich gerade keine zur Hand, Du offenbar auch nicht;-)
    Aber vielleicht versuchst Du es einmal mit
    $add = $dbh->do($db_command) or die "Fehler bei $dbcommand, ".$dbh->errstr;

    $dbh->errstr enthält die Datenbankfehlermeldung, wenn etwas schief geht. Da jede Funktion, die Du gegen die Datenbank absetzt, auch schief gehen kann, solltest Du Dir angewöhnen, bei ANwendung dieser Funktionen auch zu prüfen, ob auch alles glatt ging, d.h. Rückgabewert der Funktion überprüfen, und falls dieser einen Fehler signalisiert, die Datenbankfehlermeldung zumindest in einen Logfile schreiben. Wodurch erkennbar ist, ob eine Funktion mit einem Fehler beendet wurde, steht in der Dokumentation von DBI und der DBD-Dokumentation der verwendeten Datenbank.

    Außerdem funktioniert 'funktioniert nicht' nicht, da es nicht aussagekräftig genug ist. Bitte gewöhne Dir an, eine genauere Fehlerbeschreibung mitzugeben:
    Was sollte es tun
    Was tut es nicht
    Was tut es anstelle des erwarteten Verhalten
    Welche Meldungen gibt das Programm aus
    Welche Meldungen stehen im Webserverlog, falls es in Verbindung mit einem Webserver benutz wird.

    Grüße
      Klaus

    1. Hallö

      Außerdem funktioniert 'funktioniert nicht' nicht, da es nicht aussagekräftig genug ist. Bitte gewöhne Dir an, eine genauere Fehlerbeschreibung mitzugeben:
      Was sollte es tun
      Was tut es nicht
      Was tut es anstelle des erwarteten Verhalten
      Welche Meldungen gibt das Programm aus
      Welche Meldungen stehen im Webserverlog, falls es in Verbindung mit einem Webserver benutz wird.

      Es funktioniert nicht in dem Sinn, dass das Programm einfach gar nichts macht, am Bildschirm wird nichts angezeigt, es gibt keine Fehlermeldung aus, und schreibt auch nichts in die Datenbank, nicht einmal irgendwelche willkürlichen Zeichen!

      cu juha

  2. Hi Juha,

    Warum funktioniert folgender nicht??
    #Änderung in Datenbank eintragen
    $db_command = "insert into ajsoll
    (
            ajsoll_id,
    ajsoll_monat,
    ajsoll_jahr,
    ajsoll_tage,
    ajsoll_stunden
    )
    values
    (
    1,
    '$monatzaehler',
    '$jahr',
    NULL,
    '@solleingabe[$monatzaehler]'
    )";
    $add = $dbh->do($db_command);

    Dafür kann es ungeheuer viele Möglichkeiten geben:

    • Dein SQL-Statement kann syntaktische Fehler enthalten,
    • es könnte ein Datentyp nicht passen,
    • eines Deiner Tabellenfelder (oder gar die gesamte Tabelle!) könnte nicht
        existieren,
    • eine Zugriffsberechtigung (GRANT) könnte Dir fehlen,
    • ...

    Warum wohl erlaubt Dir die mySQL-Schnittstelle den Zugriff auf die
    entsprechende Fehlermeldung?
    Meiner Meinung nach, weil Dir diese Information weiterhelfen wird ...

    Viele Grüße
          Michael