ID: 40913 Comment by: mattgrdinic at yahoo dot com Reported By: dennis at inmarket dot lviv dot ua Status: Assigned Bug Type: PDO related Operating System: Win XP PHP Version: 5.2.1 Assigned To: wez New Comment:
Can verify this with PDO->mssql using 5.2.6 and Windows Server 2003. // Reproduction code: $VIN = $_GET['VIN']; $imageUrl = $_GET['ImageUrl']; $sql_img = "SELECT VIN, Image, ImageUrl FROM ImagesDemo WHERE VIN = :VIN AND ImageUrl = :imageUrl"; $result_img = Database::pdo_prepare_query($sql_img, array(':VIN' => $VIN, ':imageUrl' => $imageUrl)); $result_img->bindColumn('Image', $lob, PDO::PARAM_LOB); $result_img->fetch(PDO::FETCH_BOUND); header("Content-type: image/pjpeg"); var_dump($lob); // string(4096) + raw image data fpassthru($lob); // this call fails with 'supplied argument is not a valid stream resource' echo $lob; // this call only spits out 4096 bytes, chopping the image off End result -- unable to use pdo for blobs. Previous Comments: ------------------------------------------------------------------------ [2008-06-01 13:00:40] mail at matya dot hu I am using PHP 5.2.6 with MySQL 5.0.51b, and the problem is still present. Reproduce code: --------------- $sql = "SELECT FileData FROM UserFile WHERE ID=?"; $stmt = $DB->prepare($sql); $stmt->execute(array($FileID)); $stmt->bindColumn(1, $data, PDO::PARAM_LOB); $stmt->fetch(PDO::FETCH_BOUND); echo gettype($data); Expected result: ---------------- resource Actual result: -------------- string ------------------------------------------------------------------------ [2008-06-01 12:56:18] mail at matya dot hu I am using PHP 5.2.6 with MySQL 5.0.51b, and the problem is still present. Reproduce code: --------------- $sql = "SELECT FileName, ContentType, Size, FileData FROM `" . File::getTableName() . "` WHERE ID=?"; $stmt = $this->_DB->prepare($sql); $stmt->execute(array($FileID)); $stmt->bindColumn(1, $name, PDO::PARAM_STR, 255); $stmt->bindColumn(2, $type, PDO::PARAM_STR, 255); $stmt->bindColumn(3, $size, PDO::PARAM_INT); $stmt->bindColumn(4, $data, PDO::PARAM_LOB); Expected result: ---------------- ------------------------------------------------------------------------ [2007-06-19 19:06:08] hans at velum dot net I believe this is probably the same issue, but I also notice that using MySQL to simply execute a SQL query which contains BLOB result columns is also returning strings instead of streams. The difference being that I'm not using bindColumn() and specifying PDO::PARAM_LOB. I wouldn't expect that I'd need to, since simply performing a standard fetch() works as expected w/ Postgres (and, I believe, Oracle). ------------------------------------------------------------------------ [2007-03-25 12:29:07] dennis at inmarket dot lviv dot ua Description: ------------ PDOStatement::bindColumn($idx, $var, PDO::PARAM_LOB) for SELECT query makes $var a string with the BLOB Data rather than a stream, for both MySQL and SQLite. Reproduce code: --------------- $id = (int)$_REQUEST['book']; $stmt = $conn->prepare("SELECT coverMime, coverImage FROM books WHERE id=$id"); $stmt->execute(); $stmt->bindColumn(1, $mime); $stmt->bindColumn(2, $image, PDO::PARAM_LOB); $stmt->fetch(PDO::FETCH_BOUND); var_dump($image); Expected result: ---------------- Resource #1 Actual result: -------------- String(792) {GIF89a...} ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40913&edit=1