Returning a dataset with arrays

M

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!
 
T

Tad J McClellan

Macaruchi said:
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;
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,969
Messages
2,570,161
Members
46,710
Latest member
bernietqt

Latest Threads

Top