ID: 42765 Comment by: csa at dside dot dyndns dot org 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:
By the way feel free to contact me on [EMAIL PROTECTED] if you have problems with this patches. Previous Comments: ------------------------------------------------------------------------ [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