Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Learning DBI

by Bishma (Beadle)
on Nov 07, 2002 at 21:15 UTC ( [id://211232]=perlquestion: print w/replies, xml ) Need Help??

Bishma has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to learn DBI (reading from a mysql database) and I'm having troble getting a handle on things.

I was hoping the benevolent monks could offer some links to help me learn. I know the basics of relational databases but thats about it. I need something fairly basic and preferably in tutorial type form. How did you all learn?

I've read through the tutorials here at the monestary and they're some help, but I need more. I'm having problems doing something as simple as reading all rows into an array.

Sorry if I'm rambling. Any help is appreciated.

Replies are listed 'Best First'.
Re: Learning DBI
by DamnDirtyApe (Curate) on Nov 07, 2002 at 21:20 UTC

    The DBI tutorials here in the monastery are an excellent resource -- if you've worked on those and still had problems, we need more to be able to help you.

    Could you please post some code you're trying, and the kind of errors/problems you're having?


    _______________
    DamnDirtyApe
    Those who know that they are profound strive for clarity. Those who
    would like to seem profound to the crowd strive for obscurity.
                --Friedrich Nietzsche
Re: Learning DBI
by gjb (Vicar) on Nov 07, 2002 at 21:21 UTC
      Like I said, I've read through the tutorials here at perlmonks.

      I need help right down to the syntax. It's mostly greek to me.

      I connect to the DB ok, but that's where my success seems to end.
      here's a snipet (keep in mind I have little idea what I'm doing here):
      my $sth = $dbh->prepare( qw/ SELECT date, title, entry FROM News / ); $sth -> execute() or die "Couldn't execute statement: $DBI::errstr; st +opped"; while ( my ($date, $title, $entry) = $sth->fetchrow_array() ) { print STDOUT "Date: $date Title: $title Entry: $entry\n"; }
      I'm just trying (at this point) to read the three fields (date, title, and entry) from every row of the News table in this database.

        You're setting up a SELECT SQL statement selecting date, title and entry fields from a table called News. This is what prepare does. In the next statement this gets executed, i.e. the query is actually submitted to the database. The while loops over the rows fetched from the database and prints them out.

        Of course, your database should have a table News with fields date, title and entry to start with.

        First you should check what tables have been defined, if any. This can be done using the mysql client that comes with mysql, or even by just peeking into the file system (if memory serves). There's also an SQL query to do this, but I don't remember it of hand.

        Hope this helps, -gjb-

        Update: You really don't want qw since this evaluates to a list of words while prepare is expecting just a single string. Use q or qq instead.

        Actually, it looks like your problems are a bit more fundemental than just DBI - your using the quoting operator qw to set up your SQL. That's probably not what you want. Please have a look at perlop, specifically the part about "Quote and Quote-like Operators".

        rdfield

        I get the following error when the above code runs:
        DBI prepare: invalid number of parameters: handle + 6

        Thanks for the translation, it helps. Tell me if I have this correct:
        The prepare statement stores an address into $sth then the execute command gets the information from the address in the database and translates it back to the data I need. Am I understanding it correctly?
Re: Learning DBI
by cLive ;-) (Prior) on Nov 07, 2002 at 21:28 UTC
    This is a very good book.

    You can get it used on Amazon for around $11.

    .02

    cLive ;-)

      Same book, but the monastery gets a little help if you go thru here.

      Can't beat O'REILLY especially at that price... and it's on the way to my house now ;)
Re: Learning DBI
by Bishma (Beadle) on Nov 08, 2002 at 09:36 UTC
    Here's a question that would help me out. Is it possible to select a row where some field is the largest in the table?

    For example, say I want to fetch the row with the most recent date (format 20021108).
      SELECT MAX(article) AS article FROM shop
      
      +---------+
      | article |
      +---------+
      |       4 |
      +---------+
      
      Taken from the MySQL docs.

      Hope this helps, -gjb-

        that's cool, but how dow I get it to return the whole row?
        UPDATE:Never mind, I figured it out.

        Thanks for the help everyone, I think I'm getting a handle on this now.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://211232]
Approved by VSarkiss
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2024-04-24 21:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found