ID: 33693 Updated by: [EMAIL PROTECTED] Reported By: r dot vanicek at seznam dot cz -Status: Open +Status: Feedback Bug Type: Sybase-ct (ctlib) related Operating System: Linux (Debian 3.1) PHP Version: 4.4.0 New Comment:
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. Previous Comments: ------------------------------------------------------------------------ [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