ID: 42588 Comment by: mr-russ at pws dot com dot au Reported By: dhall at wustl dot edu Status: No Feedback Bug Type: PDO related PHP Version: 5CVS-2007-09-07 (snap) New Comment:
Adding the suggested parameter makes no different, the selected output is still smaller than the input. The following are the options I had added to the connection; array( PDO::ATTR_EMULATE_PREPARES => false, PDO::MYSQL_ATTR_INIT_COMMAND=>'SET CHARACTER SET utf8;', PDO::MYSQL_ATTR_MAX_BUFFER_SIZE=>4194304 ) The octet_length in the mysql cli returns the incorrect value. So it's the insert side that is having problems. Adding PDO::MYSQL_ATTR_DIRECT_QUERY=>true to the constant list does not help either. Previous Comments: ------------------------------------------------------------------------ [2008-09-23 01:00:00] php-bugs at lists dot php dot net No feedback was provided for this bug for over a week, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open". ------------------------------------------------------------------------ [2008-09-15 13:28:15] [EMAIL PROTECTED] I guess you're using emulated Prepared Statments, in that case PDO will try to inject the binary data in the query, sett PDO::ATT_EMULATE_PREPARES to false. (it works with latin charsets since they ore 8byte charsets, whereas utf-8 is multibyte) ------------------------------------------------------------------------ [2008-07-14 13:11:20] s dot urbanovski at ac-nancy-metz dot fr Same problem on Debian Lenny (PHP 5.2.6-2). I'm unable to insert LOB data if I'm using the utf-8 encoding (SET CHARACTER SET utf8; ). Some caracters are converted to 0x3F. ------------------------------------------------------------------------ [2007-09-07 15:43:19] dhall at wustl dot edu PS. If you remove the SET CHARACTER SET UTF-8 stuff, it works. I don't see why that should screw up pdo sending in lobs though. ------------------------------------------------------------------------ [2007-09-07 15:29:46] dhall at wustl dot edu Description: ------------ See Ubuntu Bug 137960 I have duplicated this compiling on Mac OS X with the latest CVS snapshot, so I think its not a Debian/Ubuntu packaging bug. Reproduce code: --------------- <?php $imagesize = getimagesize('dm color logo copy.gif'); $fp = fopen('dm color logo copy.gif', 'rb'); /** * On Linux/OS X, a 8262 byte image turns into 7966 bytes in the database * On Windows, it is stored with the correct size. */ $db = new PDO('mysql:host=localhost;dbname=play', 'db_username', 'db_password', array( PDO::MYSQL_ATTR_INIT_COMMAND=>'SET CHARACTER SET utf8;', PDO::MYSQL_ATTR_MAX_BUFFER_SIZE=>4194304 ) ); $prepared = $db->prepare('INSERT INTO `files` (`type`,`data`) VALUES (:type, :data)'); $prepared->bindParam(':type',$imagesize['mime'], PDO::PARAM_STR, 50); $prepared->bindParam(':data', $fp, PDO::PARAM_LOB); $prepared->execute(); $id = $db->lastInsertId(); $prepared = $db->prepare('SELECT `type`, `data` FROM `files` WHERE `fileid` = :fileid'); $prepared->bindParam(':fileid',$id, PDO::PARAM_INT); $prepared->execute(); $prepared->bindColumn(1, $type, PDO::PARAM_STR, 256); $prepared->bindColumn(2, $lob, PDO::PARAM_LOB); $prepared->fetch(PDO::FETCH_BOUND); header("Content-Type: $type"); echo $lob; ?> Expected result: ---------------- properly output image as on http://cowsandmilk.homeip.net/pdolob/pdolobtest.php Actual result: -------------- image missing bytes as on http://cowsandmilk.net/pdolob/pdolobtest.php (goes from 8262 bytes to 7966 bytes) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=42588&edit=1