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

Hello Wise Ones, Im trying to work with DBI and Blobs for a MySQL Database. Im having some troubles. Im having difficulties inserting the data, and retreiving it. neither seem to work. My Insert statement
Insert into table(num,name,binary) VALUES('','filename','@binary');
Then to retrieve
SELECT binary from table where num='1';
Any suggestions?

Replies are listed 'Best First'.
Re: DBI and Blobs
by cchampion (Curate) on Nov 29, 2004 at 08:19 UTC
Re: DBI and Blobs
by rupesh (Hermit) on Nov 29, 2004 at 04:05 UTC

    I have a couple of questions:

    1. Have you tried inserting the value corressponding to "num" without the single quotes - ' ?
    2. Does the query  select * from table work? If so, then what is the result set?
    3. What are the troubles that you are facing? Please be more specific.

    Cheers,
    Rupesh.
      That select statement does not seem to work

        Could you elaborate please? Does prepare returns undef? Does execute returns undef? Does fetch returns undef? Does fetch return the wrong number of columns? Does your computer go up in flames? What's in $DBI::errstr?

        Update: The DBI docs have a little to say on the subject:

        Handling BLOB / LONG / Memo Fields

        Many databases support ``blob'' (binary large objects), ``long'', or similar datatypes for holding very long strings or large amounts of binary data in a single field. Some databases support variable length long values over 2,000,000,000 bytes in length.

        Since values of that size can't usually be held in memory, and because databases can't usually know in advance the length of the longest long that will be returned from a SELECT statement (unlike other data types), some special handling is required.

        In this situation, the value of the $h->{LongReadLen} attribute is used to determine how much buffer space to allocate when fetching such fields. The $h->{LongTruncOk} attribute is used to determine how to behave if a fetched value can't fit into the buffer.

        When trying to insert long or binary values, placeholders should be used since there are often limits on the maximum size of an INSERT statement and the quote method generally can't cope with binary data. See Placeholders and Bind Values.

Re: DBI and Blobs
by dws (Chancellor) on Nov 29, 2004 at 04:40 UTC

    Any suggestions?

    Yes. Use a valid table name. "table" is a reserved word in SQL.

      And so is "binary".
      Im aware of that :-) so is binary. They're just place holders for the example