use Mosche;
Bevor ich anfange: ein Tupel ist eine Zeile deines Ergebnissatzes
Was genau macht eigentlich dieses while (my @rows = $auslesen->fetchrow_array) { ?
Ich kann nichts anderes machen, als die Daten in einer Wurscht von links nach rechts auszugeben? Ich will mit diesen ausgelesenen Daten auch etwas machen, und nicht nur dumm ausgeben, aber wie kann ich darauf zugreifen? Ich weiß nicht, wie Perl dieses (my @rows = $auslesen->fetchrow_array) behandelt. Liest es die ganze DB da ein? Anscheinend nicht, weil ich mit einer foreach Schleife @rows nicht ausgeben lassen kann, wenn ich es nicht mit while mache, so wie hier. Es würde nämlich dann nur die erste Zeile der Db ausgegeben werden, aber wieso?
In @rows steht jetzt ein Tupel.
Du hast mehrere Möglichkeiten, deine Ergebnisse aus der Datenbank zurückzubekommen.
Dazu sind alle fetch* Methoden das Statement-Handles gemacht (auch ich empfehle dir, das Ding $sth zu nennen. Grund: alle nennen es so, das macht deinen Code lesbarer für alle). Welche es alle gibt, kannst du in der DBI-Dokumentation (perldoc DBI, auch unter http://www.perldoc.com/) herausfinden.
Mit einem fetchrow_array bekommst du ein Tupel (fetch_row_) des Ergebnisses zurück, und zwar als Array. Dann gibt es das ganze noch als fetchrow_hashref, dass ist der Rückgabewert eine Referenz auf einen Hash, in denen die keys die Namen der Spalten sind, die Werte sind die Inhalte deines Tupels.
Du kannst auch fetchall_*-Methoden verwenden, die liefern dann Referenzen auf auf den gesamten Ergebnissatz zurück (fetchall_arrayref, fetchall_hashref).
Zu deiner Frage mit dem execute - durch die DBI-Spezifikation ist es den einzelnen Datenbanktreibern (DBD::mysql zB) möglich, das interpretieren deines SQL-Kommandos in zwei Schritten zu erledigen: zuerst wird das Kommando "geprüft" und es findet eine erste "Übersetzung" statt, allerdings kann es noch Platzhalter geben. Erst mit dem execute werden etwaige Platzhalter überschrieben und das Kommando wird ausgeführt. Bei gewissen Programen kann das dein Programm erheblich beschleunigen.
use Tschoe qw(Matti);
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.