ID: 42765 Comment by: jeffreybolle at gmail dot com Reported By: sms at inbox dot ru Status: Open Bug Type: PDO related Operating System: Windows 2000 SP4 PHP Version: 5.2.4 New Comment:
I had the same problem recently. I'd like to thank csa for the great source code patch. Recompiling the source under windows wasn't easy and it took me many hours to piece together all the software and libraries required. The result was a fixed extension that can access large blob files, this has been tested under Windows Vista 32bit. I thought I'd post a link for the compiled extension (PHP 5.2.6) in case any other windows users want to make use of this fix without going through the hassle of learning how to compile PHP from source. http://s3.paramorphicdesigns.com/random/php/php_pdo_odbc.dll If there are any problems feel free to contact me at [EMAIL PROTECTED] Jeffrey Previous Comments: ------------------------------------------------------------------------ [2008-06-10 09:08:40] csa at dside dot dyndns dot org By the way feel free to contact me on [EMAIL PROTECTED] if you have problems with this patches. ------------------------------------------------------------------------ [2008-06-10 09:06:02] csa at dside dot dyndns dot org I got the same problem on Linux (64bit, php 5.2.6). Actually, the problem is existing in all configurations. I have take a brief look through php sources. The bug is in pdo_odbc code and affects all architectures and underlying database engines. Actually it is in 'ext/pdo_odbc/odbc_stmt.c', function 'odbc_stmt_describe'. The 'displaysize' variable is expected to contain estimated size of the column. This could be a negative number if BLOB or TEXT data is stored (since the record sizes could seriously vary). However, later in this function the check on data size does not consider negative numbers. This causes the described behavior. This patch solves problem for me: http://dside.dyndns.org/projects/patches.dir/php-ds-odbc_blob.patch A Linux user trying to access MSSQL over FreeTDS may be interested in the following patches as well: http://dside.dyndns.org/projects/patches.dir/freetds-ds-odbc.patch http://dside.dyndns.org/projects/patches.dir/php-ds-odbc64.patch ------------------------------------------------------------------------ [2007-09-27 18:07:29] carlton dot whitehead at cebesius dot com I encountered this bug with this setup: Windows Server 2003 SP2 32bit IIS 6 PHP 5.2.4 MS SQL Server 2005 Express SP2 PDO ODBC reproduce code: --------------- <?php // lobtestPdoOdbc.php try { $db = new PDO('odbc:fmarchive_mssql', 'change', 'me'); $stp = 'SELECT attdata FROM fm_faxin_att WHERE id = 119085913400004 AND attid = 0'; // statement to prepare $ps = $db->prepare($stp); $execResult = $ps->execute(); var_export($execResult, true); } catch (PDOException $e) { die($e->getMessage()); } ?> Expected result: ---------------- output to browser: true Actual result: -------------- *Fatal error*: Out of memory (allocated 262144) (tried to allocate 4294967295 bytes) in *C:\Inetpub\wwwroot\FMarchive\lobtestPdoOdbc.php* on line *9* plain ODBC reproduce code: -------------------------- <?php // lobtestOdbc.php $res = odbc_connect('fmarchive_mssql', 'change', 'me'); if (!$res) { die ('failed to connect'); } $stp = 'SELECT attdata FROM fm_faxin_att WHERE id = 119085913400004 AND attid = 0'; // statement to prepare $ps = odbc_prepare($res, $stp); if (!$res) { die ('failed to prepare statement'); } $execResult = odbc_execute($ps); echo var_export($execResult, true); ?> Expected result: ---------------- output to browser: true Actual result: -------------- output to browser: true (this indicates odbc_execute worked correctly) ------------------------------------------------------------------------ [2007-09-26 11:00:15] sms at inbox dot ru Description: ------------ With PDO ODBC I can't get long binary data from Microsoft SQL Server (image and varbinary(MAX) fields). PDO->query, PDOStatement->execute() always result in PHP "Out of memory" error, even if output contains no rows. The same queries work fine with ODBC unified extension. Reproduce code: --------------- <?php $dbh=new PDO('odbc:Driver={SQL Server};Server=localhost;Database=test','user','pass'); $dbh->query("select [nbin] from [atts] where [id]=1"); ?> Expected result: ---------------- No PHP fatal errors Actual result: -------------- PHP Fatal error: Out of memory (allocated 262144) (tried to allocate 4294967295 bytes) in D:\Web\test.php on line 3 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=42765&edit=1
