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 csa@dside.dyndns.org 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