Mit fetchrow_hashref, um Daten zu speichern
Ich bin versucht, die Informationen aus einer MySQL-Datenbank, die ich dann Bearbeiten in perl:
use strict;
use DBI;
my $dbh_m= DBI->connect("dbi:mysql:Populationdb","root","LisaUni")
or die("Error: $DBI::errstr");
my $Genotype = 'Genotype'.1;
#The idea here is eventually I will ask the database how many Genotypes there are, and then loop it round to complete the following for each Genotype:
my $sql =qq(SELECT TransNo, gene.Gene FROM gene JOIN genotypegene ON gene.Gene = genotypegene.Gene WHERE Genotype like '$Genotype');
my $sth = $dbh_m-> prepare($sql);
$sth->execute;
my %hash;
my $transvalues = $sth->fetchrow_hashref;
my %hash= %$transvalues;
$sth ->finish();
$dbh_m->disconnect();
my $key;
my $value;
while (($key, $value) = each(%hash)){
print $key.", ".$value\n; }
Dieser code produziert keine Fehler, aber die %hash speichert nur die Letzte Zeile aus der Datenbank (ich habe die Idee, Sie zu schreiben, diese Art von diese website). Wenn ich Typ:
while(my $transvalues = $sth->fetchrow_hashref){
print "Gene: $transvalues->{Gene}\n";
print "Trans: $transvalues->{TransNo}\n";
}
Dann druckt alle Zeilen, aber ich brauche all diese Informationen werden verfügbar, sobald ich geschlossen habe, die Verbindung zur Datenbank.
Ich habe auch eine Frage: in meiner MySQL-Datenbank die Reihe besteht aus e.g 'Gene1'(Gen -) '4'(TransNo). Einmal habe ich es unternommen, diese Daten aus der Datenbank wie ich oben, wird die TransNo noch wissen, welches Gen es ist verbunden mit? Oder muss ich eine Art von hash hash-Struktur?
- Eine Seite Hinweis auf Ihre SQL-Anweisung in Perl, können Sie die variable aus dem $sql-variable und gehören als Teil der execute-Anweisung. Versuchen Sie dies:
my $sql =qq(SELECT ... WHERE Genotype like ?); my $sth = $dbh_m-> prepare($sql); $sth->execute($Genotype);
Dies wird verhindern, dass gegen SQL-injection-Attacken und ist eine gute Angewohnheit, in zu erhalten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie sind dem Aufruf der "falsch" - Funktion
fetchrow_hashref
zurück eine Zeile als hashref, sollten Sie wickeln Sie es verwenden in einer Schleife endet, wennfetchrow_hashref
gibtundef
.Wie es scheint, Sie sind auf der Suche für
fetchall_hashref
, dass Ihnen alle zurückgegebenen Zeilen, wie ein hash mit dem ersten parameter angegeben, welches Feld als Schlüssel.Jede Zeile wird eingefügt
$hash_ref
als interne hashref, mit$key_field
als Schlüssel können Sie in der Zeile, in$hash_ref
.Was bedeutet die Dokumentation sagen?
Dokumentation links