Edit report at http://bugs.php.net/bug.php?id=38805&edit=1
ID: 38805
Comment by:
Reported by: gkrajci at arescorporation dot com
Summary: PDO Truncates Text from SQL Server Text Data Type
Field
Status: Assigned
Type: Bug
Package: PDO related
Operating System: Windows NT PBMA-WB2 5.2 build 37
PHP Version: 5.1.6
Assigned To: sfox
New Comment:
I solved this problem by adding to my php script a TEXTSIZE that is less
than the allowed memory from the MSSQL server.
Remember, all the number are in Bytes, so I kept playing with the
numbers, until this worked:
// ranges from 0 - 3145728 = 3Megabytes. Default to 4096.
$sql = "SET TEXTSIZE 3145728";
mssql_query($sql, $db) or die(mssql_get_last_message());
Remember to always know what the allowed upload size for your server
is.
I hope this helps someone
Previous Comments:
------------------------------------------------------------------------
[2010-02-12 16:57:02] [email protected]
Those changes are still in SVN. That means the TEXTLIMIT var is being
set to its highest possible value, which in turn means that truncation
shouldn't be an issue now.
$pdo->query('SET TEXTSIZE 300000');
should work from PHP 5.2.11 up, it just needs doccing.
------------------------------------------------------------------------
[2010-02-12 09:05:28] philipp at servicemail24 dot de
This problem is actually fixed in cvs:
http://www.mail-archive.com/[email protected]/msg40731.html
http://www.mail-archive.com/[email protected]/msg40711.html
Here is the working source code:
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_dblib/
I have no idea why these fixes aren't included in the 5.2 and 5.3
releases!
@sfox can you ensure that pdo_dblib is updated with the release of
5.2.13 and 5.3.2?
------------------------------------------------------------------------
[2010-02-11 15:40:43] philipp at servicemail24 dot de
php 5.3.2 dotdeb still suffers from this problem.
does this fix help?
"Possible fix: remove "case SQLTEXT" from
ext/pdo_dblib/dblib_stmt.c:execute and let it fall though to default."
------------------------------------------------------------------------
[2010-01-22 22:51:02] ssufficool at gmail dot com
I imagine the problem is that PDO DBLIB just mem-copies the first packet
of TEXT without calling dbgettext() to retrieve the remainder.
MSSQL handles TEXT fields using dbconvert() which may call dbgettext()
downstream.
Possible fix: remove "case SQLTEXT" from
ext/pdo_dblib/dblib_stmt.c:execute and let it fall though to default.
------------------------------------------------------------------------
[2010-01-10 23:22:50] [email protected]
Steph, does this need any additional changes to pdo_mssql/pdo_dblib? And
what exactly should be documented?
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/bug.php?id=38805
--
Edit this bug report at http://bugs.php.net/bug.php?id=38805&edit=1