ID: 33693 Comment by: walter at wjd dot nu Reported By: r dot vanicek at seznam dot cz Status: No Feedback Bug Type: Sybase-ct (ctlib) related Operating System: Linux (Debian 3.1) PHP Version: 4.4.0 New Comment:
You need tds version 7.0 for the bug to rear it's head. E.g. by "tds version = 7.0" in /etc/freetds/freetds.conf or with TDSVER=7.0 environment variable. (The 7.0 version transmits UCS-2 instead of ASCII which is used with 4.2) I'd really like this fixed, because I need 7.0 for working UTF8 support (with NVARCHARs in my database). When PHP is run from an apache module and the bug occurs, apache fails to serve (crashes?) any page that uses sybase-connections! #-------------------------------------------------- # Versions #-------------------------------------------------- PHP 5.2.0-8+etch7 (cli) (built: Jul 2 2007 21:46:15) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies #-------------------------------------------------- # Output of my own test code using SELECT * #-------------------------------------------------- $ TDSVER=4.2 php test2.php Success! $ TDSVER=7.0 php test2.php error_handler: Data-conversion resulted in overflow. Segmentation fault (core dumped) Previous Comments: ------------------------------------------------------------------------ [2007-07-12 21:41:58] shiftlessways at hotmail dot com This bug still seems to exist in current php 5 and 6 snapshots. I don't know how exactly there is not enough info in the original post but while the provided patch does fix the problem and work perfectly, patching php may not be an option. So altering your sql to cast the id value into a varchar before it is returned can be used as a workaround untill this ever gets fixed. ------------------------------------------------------------------------ [2005-07-26 01:00:05] php-bugs at lists dot php dot net No feedback was provided for this bug for over a week, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open". ------------------------------------------------------------------------ [2005-07-18 02:37:25] [EMAIL PROTECTED] Not enough information was provided for us to be able to handle this bug. Please re-read the instructions at http://bugs.php.net/how-to-report.php If you can provide more information, feel free to add it to this bug and change the status back to "Open". Thank you for your interest in PHP. ------------------------------------------------------------------------ [2005-07-14 10:53:46] r dot vanicek at seznam dot cz Description: ------------ I am connecting from PHP to Sybase and MSSQL. I have sybase-ct extension enabled. I use freetds-0.63. When I select from MSSQL any column of type "uniqueidentifier", PHP crashes on fetch. The problem is conversion. Sybase-ct module does not handle CS_UNIQUE_TYPE, and tries to store the 38 byte string that freetds returns to it into 16 byte string. Freetds refuses to do so and signals an error, which is probably fatal. Test suite: see reproduce code. The solution I suggest is to intoduce CS_UNIQUE_TYPE into php_sybase_ct.c, function php_sybase_fetch_result_set for example like this: case CS_DECIMAL_TYPE: result->datafmt[i].maxlength = result->datafmt[i].precision + 3; /* numeric(10) vs numeric(10, 1) */ result->numerics[i] = (result->datafmt[i].scale == 0) ? 3 : 2; break; case CS_UNIQUE_TYPE: result->datafmt[i].maxlength = 38; result->numerics[i] = 0; break; default: result->datafmt[i].maxlength++; result->numerics[i] = 0; break; This solution works for me quite well. Reproduce code: --------------- create table TEST (a int, b varchar, c uniqueidentifier); insert into TEST values (1,'hello',newid()); sybase_connect( "srv", "uid", "pwd" ); sybase_select_db( "dbname" ); // this works fine $res = sybase_query( "select a,b from TEST" ); $row = sybase_fetch_array( $res ); // this crashes $res = sybase_query( "select a,b,c from TEST" ); $row = sybase_fetch_array( $res ); It is all the same if you use mssql_ functions instead of sybase_ functions. Expected result: ---------------- eg. row containing 1 'hello' 'EB668095-F85D-4C59-A202-120C5CE1B65' Actual result: -------------- crash, in Apache error.log I see this: [notice] child pid 18857 exit signal Segmentation fault (11) error_handler: Data-conversion resulted in overflow. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=33693&edit=1