Thread DBI in Wrapperklasse landet bei fetchrow in Endlosschleife (5 answers)
Opened by cookie at 2017-11-24 17:24

Gast cookie
 2017-11-24 17:24
#187663 #187663
Hallo in die Runde,

könnt ihr mir einen Hinweis geben, warum folgender Code nicht funktioniert?

Code (perl): (dl )
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
35
36
37
38
39
40
41
42
43
44
package Kernel::DB;

use strict;
use warnings;
use DBI;

sub new {
    my ( $Type, %Param ) = @_;
    my $Self = {};
    bless( $Self, $Type );
        
        $Self->{DBUser} = 'xxx';
        $Self->{DBPassword} = 'xxx';
        $Self->{DBName} = 'xxx';
        $Self->{DBConnectString} = 'DBI:mysql:database=' . $Self->{DBName};
        
        $Self->{dbh} = DBI->connect($Self->{DBConnectString}, $Self->{DBUser}, $Self->{DBPassword});
        
    return $Self;
}

sub prepare {
        my ( $Self, %Param ) = @_;
        my $Querystring = $Param{Query};
        
        $Self->{query} = $Self->{dbh}->prepare($Querystring);
}

sub fetchrow_array {
        my ( $Self, %Param ) = @_;
        
        $Self->{query}->execute or die $Self->{query}->err_str;
        
        return $Self->{query}->fetchrow_array();
}

sub do {
        my ( $Self, %Param ) = @_;
        my $Querystring = $Param{Query};
        
        $Self->{dbh}->do($Querystring);
}

1;


Wenn ich jetzt folgendes aufrufe:

Code (perl): (dl )
1
2
3
4
5
6
7
8
my $DbObj = new Kernel::DB;
        
        $DbObj->prepare(Query => 'select * from user where lobbyname = "' . $Lobbyname . '"');
        
        while(my @Rows = $DbObj->fetchrowarray())
        {
                push @Userlist, $Rows[0];
        }


Endet dieser Code in einer Endlosschleife.

Benutze ich meine Wrapperklasse nicht sondern mache es wie folgt:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $dbh = DBI->connect('DBI:mysql:xxxx', 'xxxxx', 'xxx')
|| die "ERROR: $DBI::errstr";
        
        my $sth = $dbh->prepare('select * from user where name = "' . $username . '"');
        
        $sth->execute;
        
        my $counter = 0;
        while(my @Rows = $sth->fetchrow_array())
        {
                $counter++;
        }


Funktioniert alles ohne Probleme...

Ich sehe leider keinen Unterschied und erstehe nicht warum ich hier in einer Endlosschleife hängen bleibe.

Danke für eure Hilfe!
Last edited: 2017-11-24 17:29:35 +0100 (CET)

View full thread DBI in Wrapperklasse landet bei fetchrow in Endlosschleife