F. Müller: (Perl)Nur ein Resultat zurückgeben

Hallo

Ich mache eine mit folgenden Zeilen eine DB Abfrage:

my $dbh = DBI->connect( 'dbi:mysql:datenbank', 'datenbank', 'dbpasswort') ||
     die "Keine Verbindung\n";

my $sth = $dbh->prepare( 'SELECT usernr FROM users' ) ||
     die "Etwas ging schief\n";

$sth->execute ||
     die "Ausführen ging schief\n";

Nun weiss ich ja, dass ich nur eine Rückgabezeile bekomme, da diese usernr 100% nur 1 mal existiert. Dann wäre es ja Schwachsinn mit fetchrow_array das in ein Array zu speichern. Wie kann ich diesen Wert dann in einem normalen String speichern?

Vielen Dank!

F. Müller

  1. Sorry, meine SELECT Anweisung stimmt im vorderen Beitrag nicht ganz. Sie sollte so aussehen, damit sichern nur eine Zeile als Antwort kommt: SELECT usernr FROM users where usernr=1

    F. Müller

  2. Halihallo F.

    my $dbh = DBI->connect( 'dbi:mysql:datenbank', 'datenbank', 'dbpasswort') ||
         die "Keine Verbindung\n";

    my $sth = $dbh->prepare( 'SELECT usernr FROM users' ) ||
         die "Etwas ging schief\n";

    $sth->execute ||
         die "Ausführen ging schief\n";

    Du solltest dir angewöhnen aussagekräftigere Fehlermeldungen zu
    produzieren. Verwende bei Verwendung von DBI die Methode bzw.
    Variable $sth->{errstr} | $sth->errstr().

    Nun weiss ich ja, dass ich nur eine Rückgabezeile bekomme, da diese usernr 100% nur 1 mal existiert. Dann wäre es ja Schwachsinn mit fetchrow_array das in ein Array zu speichern. Wie kann ich diesen Wert dann in einem normalen String speichern?

    Falsch. Du kriegst in den seltensten Fällen eine Zeile (du meinst
    Datensatz oder Tupel), sondern genau ein Attribut ("Spalte"); denn
    du hast wohl mehr als ein User, oder?

    Ich halte das Verwenden von fetchrow_array | fetchrow_arrayref für
    durchaus legitim, denn die Performanceeinbusse ist minimal. Aber
    bitte...

    perldoc DBI

    dort findest du eine Methode: bind_col oder bind_columns, welcher
    du die Variablenreferenzen für die einzelnen Attribute des
    ResultSets übergeben kannst. Bei jedem fetch werden diese dann mit
    den aktuellen Tupelwerten gefüllt. Ein Beispiel zur Anwendung findest
    du ebenfalls in der Dokumentation zu DBI.

    Viele Grüsse

    Philipp