Returning a dataset with arrays

Discussion in 'Perl Misc' started by Macaruchi, Apr 1, 2008.

  1. Macaruchi

    Macaruchi Guest

    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!
    Macaruchi, Apr 1, 2008
    #1
    1. Advertising

  2. 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/"
    Tad J McClellan, Apr 1, 2008
    #2
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Boffo Jinko

    Returning a DataSet from a Web Services

    Boffo Jinko, Nov 7, 2003, in forum: ASP .Net
    Replies:
    2
    Views:
    3,249
    Guest
    Nov 7, 2003
  2. Paul
    Replies:
    0
    Views:
    412
  3. Alexandra Stehman
    Replies:
    5
    Views:
    30,599
    Chris Smith
    Jun 17, 2004
  4. Replies:
    11
    Views:
    662
    Christos Georgiou
    May 2, 2006
  5. Philipp
    Replies:
    21
    Views:
    1,126
    Philipp
    Jan 20, 2009
Loading...

Share This Page