phppostgresql-9.1laravel

Laravel - using a postgre bytea blob field


I am using PostgreSQL on a Laravel installation. A table has a byte-type field that is being used to store binary data (base64_encoded file contents).

When I use Eloquent to retrieve the table I get a resource type variable being returned in this field.

How can I rather retrieve this as a string?

$raw = Media::where('id','=',$id)->first();
$raw->file_data = base64_decode($raw->file_data);   // doesn't work

Solution

  • As the author of this question did not post the details to the answer, I will post my findings here.

    As the returned field is a handle to a stream you can use the stream_get_contents function to read the value into a string, you can then use pg_unescape_bytea to get the actual value of the bytea data. Finally use the htmlspecialchars function if you wish to display the bytea data in HTML.

    Example code:

    $my_bytea = stream_get_contents($resource);
    $my_string = pg_unescape_bytea($my_bytea);
    $html_data = htmlspecialchars($my_string);