Readers: 22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$database = "dbname";
$host = "localhost";
$user = "username";
$pw = "pw";
$searchstring = "ein in Spalte 1 vorkommender Wert"
$dsn = "dbi:mysql:$database:localhost:3306";
$connect = DBI->connect($dsn, $user, $pw);
$query = "select * from dbname where value1 = '$searchstring'";
$query_handle = $connect->prepare($query);
$query_handle->execute();
$query_handle->bind_columns(\$value1, \$value2);
while($query_handle->fetch()) {
print OUTPUT "$value1\t","$value2\n";
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Data::Dumper qw/Dumper/;
my $database = "dbname";
my $host = "localhost";
my $user = "username";
my $pw = "pw";
my $searchstring = "ein in Spalte 1 vorkommender Wert"; # hier muss ein ; hin
my $dsn = "dbi:mysql:$database:localhost:3306";
# was ist mit den Attributen?
my $dbh = DBI->connect($dsn, $user, $pw) or die("err connect: " . DBI->errstr());
my $sql = 'select * from dbname where value1 = ?';
my $sth = $dbh->prepare($query) or die("err prep: " . DBI->errstr());
# hier werden die Werte eingefügt, die für die Platzhalter eingefügt werden sollen.
# du hast 1 Platzhalter, also übergibst du 1 Wert.
my $rv = $dbh->execute($searchstring) or die("err exec: " . DBI->errstr());
# rv kann man auswerten, muss man aber nicht (wird nicht von allen Datenbanken unterstützt).
while( my $arrayref = $sth->fetchrow_arrayref() ) {
# du machst ein print OUTPUT, aber was ist OUTPUT? Ein Datei-Handle?
# die Konsole ist glaube ich STDOUT
print Dumper $arrayref; # Data::Dumper ist cool!
}
2009-11-19T22:59:46 pktm* Du benutzt bind, hast aber keine Platzhalter definiert.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#!/usr/bin/env perl use strict; use warnings; use DBI; my $database = "dbname"; my $host = "localhost"; my $user = "username"; my $pw = "pw"; my $searchstring = "ein in Spalte 1 vorkommender Wert"; my $dsn = "dbi:mysql:$database:localhost:3306"; my $options = { RaiseError => 1, AutoCommit => 1 }; my $dbh = DBI->connect($dsn, $user, $pw, $options); # Man sollte direkt spaltenwerte nutzen kein "*" my $sql = 'select column1,column2 from dbname where value1 = ?'; my $sth = $dbh->prepare($query); my $rv = $dbh->execute($searchstring); # bind_columns war schon korrekt... my ( $column1, $column2 ); $sth->bind_columns(\$column1, \$column2); while( $sth->fetch ) { print "COLUMN1: $column1 COLUMN2: $column2\n"; }
$sth->bind_columns(\$column1, \$column2);
QuoteWas läuft hier schief?
my $rv = $sth->execute($searchstring,$seacrhstring2.....);
2009-11-23T20:35:41 gmafxEine Frage: wenn ich komplexere Abfragen mit mehreren "Fragezeichen" (kannte ich nicht, sieht aber natürlich besser aus, als alles voller $variable1, $variable2 zu schreiben)
Quotein der where-Klausel habe, kann ich dann verschiedene Variablen mit Komma getrennt übergeben
QuoteUnd was, wenn schon die abgefragten Werte der Tabelle als Variable angegeben werden? Irgendwie verstehe ich nie, wann ich denn einfach die Variable angeben kann, wann sie in "" oder '' gehört.
Quotefragezeichen stehen immer für werte, also zahlen oder strings, keine spalten- oder tabellennamen.
my $sql =' SELECT $column_name from tabelle where ... '
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
use DBI; my $DB_NAME = "test"; my $DB_USER = "xxxx"; my $DB_PASS = "xxx"; $test_data = DBI->connect("DBI:mysql:$DB_NAME","$DB_USER","$DB_PASS"); $data= checkdb($var1,$var2,$var3); ## die Variablen var1-var3 werden in einer Schleife produziert, habe ich hier mal alles weggelassen sub checkdb{ my $chr_id = $_[0]; my $left = $_[1]; my $right = $_[2]; my $query = "SELECT loc, mark, val FROM test WHERE chr_id = $chr_id AND loc BETWEEN $left AND $right"; my $query_handle = $test_data->prepare($query); $query_handle->execute(); my $data; while(my($loc, $mark, $val) = $query_handle->fetchrow_array()) { $data->{$mark}->{$loc} = $val; } return $data; } }
$data->{$mark}->{$loc} = $val;
print $data
print Dumper $data
print Dumper $data