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.
InformationsquelleAutor Lisa | 2011-12-21
Schreibe einen Kommentar