push tries to add items to its first argument. Your loop is resetting @result each time through. You probably want something like:
while (@result = $sth->fetchrow_array()) {
push @dept, @result;
}
| [reply] [d/l] [select] |
Hi djbryson,
Other people have already pointed out the issue around the arguments to push - I thought it might be worth adding that:
What you're doing will put each column from the database into your array, one after another, and squdge them all together. E.g. if one set of results looked like this: (1, 2, 3) then after three fetches your array of results would look like this: (1, 2, 3, 1, 2, 3, 1, 2, 3)
You might be better either
a) putting a reference to @result onto @dept, like this: push @dept, \@result (or you could use fetchrow_arrayref), or
b) using fetchall_arrayref
Either way, instead of a data structure that looks like this:
(1, 2, 3, 1, 2, 3, 1, 2, 3)
I'd suggest using a data structure like this:
( [1, 2, 3],
[1, 2, 3],
[1, 2, 3] )
as you'll find it easier to work with when you come to do whatever you're going to do with it. You can find more info about this kind of thing in perlref.
HTH! a.
update: of course, if you're only fetching one column at a time then the way you have it is already perfectly sensible, and not worth changing... | [reply] [d/l] [select] |
Heck, why do extra work when DBI already does it for you?
@dept = @{$sth->fetchall_arrayref()};
Now @dept holds a bunch of array references, one for each of your rows. You can step through @dept, dereference the array reference, and go to town on the columns you need:
use strict;
use Data::Dumper;
foreach my $thisrow (@dept) {
if (ref($thisrow) eq 'ARRAY) {
my @columns = @{$thisrow};
foreach (@columns) {
# do something
}
}
else {
print "Hey! That's not an array reference!\n";
print Dumper($thisrow);
}
}
Admittedly, that is a little more explicit than I would actually do in practice -- no need for @columns when you can just talk about $thisrow->[2], for example.
| [reply] [d/l] [select] |
you probably have the arguments backward, check the docs. I assume you want to add @result onto @dept?
while (@result = $sth->fetchrow_array()) {
push @dept,@result;
}
__________
Systems development is like banging your head against a wall...
It's usually very painful, but if you're persistent, you'll get through it.
| [reply] [d/l] [select] |
Perhaps @dept and @result are reversed? push adds to the first array whatever is in the list or array that follows.
Otherwise, we'll need a little more description of what you are trying to do.
Phil | [reply] |
ugh, it was backwards... thanks guys
| [reply] |