Sven: Rückgabewert abfragen

Hallo

Wie bringe ich einen Rückgabewert, zB. einer von einer mySQL-DB in eine Variabel.

Die Ausgabe auf den Bildschirm bekomme ich ja so:

$dbh = DBI->connect($db_dsb, $sqlusr, $sqlpw) or die "Kann keine Verbindung zum MySQL-Server aufbauen: $DBI::errstr\n";

Ich bräuchte also etwas wie "or die" das mir aber die Ausgabe in eine Variabel liefert.

Geht das überhaupt?

  1. bin mir nicht ganz sicher was du meinst, aber die variable gibts doch mit $DBI::errstr

    außerdem kannst du folgendes machen:

    eval { $dbh->do( $query ); };

    if ( $@ ) { return "Fehler: $@"; }

    $@ enthält dann den Grund.

    1. also nochmals

      "die" bricht ja eine Routine ab und gibt den Grund auf den Bildschirm aus.

      zB.: ich verbinde zu DB mit dem user "WEB" und dem PW "123" nun ist das Passwort flasch dann sieht das Ergebniss ja dann so aus:

      Script: $dbh = DBI->connect(DB, web, 123) or die "$DBI::errstr\n"
      Ausgabe auf Bildschirm: Access denied for user: 'web@localhost'

      nun gibt es auch noch "warn". Warn macht ja das selbe nur wird der Grund in die LOG-Datei ausgegeben und das Script weiter verarbeitet.

      Ich suche nun eine Möglichkeit wie ich das Script trotz falschem Benutzer oder auch Passwort weiterlaufen lassen kann und den Fehler in eine Variabel schreiben kann.

      Diese Variabel möchte ich dann weiter verarbeiten im Script und später ausgeben.

      Gruss SVEN

      1. Hallo,

        Ich suche nun eine Möglichkeit wie ich das Script trotz falschem Benutzer oder auch Passwort weiterlaufen lassen kann und den Fehler in eine Variabel schreiben kann.

        äh, dann lass dein skript nicht sterben sondern setze eine variable ?!

        gruss

        --
        Swiss Army Chainsaw
        Terrorific!
        Given a cow full of milk, should the milk un-cow itself, or should the cow milk itself?
      2. $DBI::errstr ist doch die Variable.

        wenn du das unbedingt in eine andere schreiben willst musst du halt ne neue belegen:

        my $dbh = DBI->connect(DB, "web", "123");
        my $variable = $DBI::errstr if $DBI::errstr;

        oder sowas:

        eval { $dbh = DBI->connect(DB, "web", "123") }
        my $variable = $@ if $@;

        sorry, wenn ich dich noch nicht richtig verstanden habe

        1. Hallo Alex

          Thx für die Infos. Ich habe jetzt dies Lösung für mein Problem:

          $dbh = DBI->connect($db_dsb, $sqlusr, $sqlpw) or return $sqlmsg = "MySQL Verbindungsfehler: $DBI::errstr";

          return beendet die aktuelle Sub-Routine und gibt mir nun das zurück was ich brauche.

          Selfhtml befasst sich mit dieser Thematik unter http://de.selfhtml.org/perl/funktionen/kontrolle.htm

          Grüsse Sven