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

Reply via email to