note 96311 modified in pdo.lobs by thiago
| From: | thiago@php.net | Date: | Mon, 22 Feb 2010 03:02:08 +0000 |
| Subject: | note 96311 modified in pdo.lobs by thiago | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-166241@lists.php.net to get a copy of this message | ||
There seems to be a bug that affects example 1 above. PDO::PARAM_LOB when used with
pdo::bindColumn() is supposed to return a stream but it returns a string. Passing this string to
fpassthru() then triggers an error with the message 'supplied argument is not a valid stream
resource'. This has been reported in bug #40913. The work around is to do the following:
<?php
$stmt = $db->prepare("select contenttype, imagedata from images where id=?");
$stmt->execute(array($_GET['id']));
$stmt->bindColumn(1, $type, PDO::PARAM_STR, 256);
$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
header("Content-Type: $type");
echo($lob);
?>
Since the browser is expecting an image after the call to header() writing the string representation
of the binary output with echo() has the same affect as calling fpassthru().
--was--
There seems to be a bug that affects example 1 above. PDO::PARAM_LOB when used with
pdo::bindColumn() is supposed to return a stream but it returns a string. Passing this string to
fpassthru() then triggers an error with the message 'supplied argument is not a valid stream
resource'. This has been reported in bug #40913. The work around is to do the following:
$stmt = $db->prepare("select contenttype, imagedata from images where id=?");
$stmt->execute(array($_GET['id']));
$stmt->bindColumn(1, $type, PDO::PARAM_STR, 256);
$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
header("Content-Type: $type");
echo($lob);
Since the browser is expecting an image after the call to header() writing the string representation
of the binary output with echo() has the same affect as calling fpassthru().
http://php.net/manual/en/pdo.lobs.php