Returning a dataset with arrays
Returning a dataset with arrays
am 01.04.2008 02:55:23 von Macaruchi
Hi!
I am a newbie using Perl and I have a big problem , for me, and it is
that I need to return a query result into a array but I cant do that.
I did this code:
sub getcodigodb()
{ local($table)= shift;
local($field)= shift;
my $code=shift;
my $dbh = open_connection();
my $sql = "SELECT * FROM $table WHERE $field=$code ";
my $sth = $dbh->prepare($sql);
$sth->execute or die "Unable to execute SQL query: $dbh->errstr
\n";
my $sth = $dbh->prepare($sql);
$sth->execute or die "Unable to execute SQL query: $dbh->errstr
\n";
$ref = $sth->fetchall_arrayref;
$sth->finish;
$dbh->disconnect;
return $ref;
}
}
$sth->fetchall_arrayref; I use this because I read that I need a perl
structure for moving into it.
This select can return 0,1 or n rows so I suppose $ref has this rows
but I dont know how to access them.
Could be this way :
@rows=&getcodigodb('mytable','myfield',3434); Is it correct?
If it is how can I access the rows. If the query doesnt find records,
what the function return to determine if the dataset exist or not?
I do this but this just print the selection I want return the
selection and manipulate whenever I want because it is in array and I
can use everything functions from array
while (@row = $sth->fetchrow_array)
{ # retrieve one row
print join(", ", @row), "\n";
}
I just want to access the selection like a cursor.
Sorry for inconveniece but I am so confused with this.
Thks in Advance!
Re: Returning a dataset with arrays
am 01.04.2008 03:42:28 von Tad J McClellan
Macaruchi wrote:
> I am a newbie using Perl and I have a big problem , for me, and it is
> that I need to return a query result into a array but I cant do that.
>
> I did this code:
>
> sub getcodigodb()
> { local($table)= shift;
> local($field)= shift;
You should always prefer lexical (my) variables over package (local)
variables, except when you can't.
You can here, so those should be my() rather than local() declarations.
> my $code=shift;
Get all 3 arguments in one go:
my($table, $field, $code) = @_;
> my $dbh = open_connection();
>
> my $sql = "SELECT * FROM $table WHERE $field=$code ";
> my $sth = $dbh->prepare($sql);
> $sth->execute or die "Unable to execute SQL query: $dbh->errstr
> \n";
>
> my $sth = $dbh->prepare($sql);
> $sth->execute or die "Unable to execute SQL query: $dbh->errstr
> \n";
>
> $ref = $sth->fetchall_arrayref;
>
> $sth->finish;
> $dbh->disconnect;
>
> return $ref;
> }
> }
>
> $sth->fetchall_arrayref; I use this because I read that I need a perl
> structure for moving into it.
> This select can return 0,1 or n rows so I suppose $ref has this rows
> but I dont know how to access them.
Read:
perldoc perlreftut
> Could be this way :
> @rows=&getcodigodb('mytable','myfield',3434); Is it correct?
No, that won't work.
Apply "Use Rule 1" from the above documentation.
I like to do it in 3 steps:
1) pretend it is an ordinary array:
@rows = @query_rows;
2) replace the name with a block:
@rows = @{ };
3) put something in the block that returns the right kind of reference:
@rows = @{ getcodigodb('mytable', 'myfield', 3434) };
(do not use an ampersand when calling functions unless you know what
it does, and what it does is what you want to do (it seldom is).
)
> If it is how can I access the rows. If the query doesnt find records,
> what the function return to determine if the dataset exist or not?
warn "no results\n" unless @rows;
--
Tad McClellan
email: perl -le "print scalar reverse qq/moc.noitatibaher\100cmdat/"
Re: Returning a dataset with arrays
am 07.04.2008 15:25:15 von Alexandr Ciornii
On 1 Apr, 03:55, Macaruchi wrote:
> I am a newbie using Perl and I have a big problem , for me, and it is
> that I need to return a query result into a array but I cant do that.
Did you start your program with "use strict;use warnings;"?
Good version of your code:
sub getcodigodb
{ my ($table,$field,$code)= @_;
my $dbh = open_connection();
my $sql = "SELECT * FROM $table WHERE $field=$code";
my $sth = $dbh->prepare($sql);
$sth->execute() or die "Unable to execute SQL query: $dbh-
>errstr
\n";
$ref = $sth->fetchall_arrayref;
$sth->finish;
$dbh->disconnect;
return $ref;
}
}
> Could be this way :
> @rows=&getcodigodb('mytable','myfield',3434); Is it correct?
No
my $ref=getcodigodb('mytable','myfield',3434);
or my @recs=@{getcodigodb('mytable','myfield',3434)};
Don't use '&' to call subs.
There is a good book about Perl: "Learning Perl". 4th edition is best.
Good Perl tutorials are available here:
http://www.perlfoundation.org/perl5/index.cgi?recommended_on line_tutorials
---
Alexandr Ciornii, http://chorny.net