Bug #73725 [Fbk->Opn]: Unable to retrieve value of varchar(max) type

From: Date: Tue, 13 Dec 2016 15:07:42 +0000
Subject: Bug #73725 [Fbk->Opn]: Unable to retrieve value of varchar(max) type
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-205959@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73725&edit=1 ID: 73725 User updated by: honza dot hink at gmail dot com Reported by: honza dot hink at gmail dot com Summary: Unable to retrieve value of varchar(max) type -Status: Feedback +Status: Open Type: Bug Package: ODBC related Operating System: Windows 10 PHP Version: 7.1.0 Block user comment: N Private report: N New Comment: ODBC Trace content (SQL.LOG): php-cgi fc8-204c ENTER SQLSetEnvAttr SQLHENV 0x0000000000000000 SQLINTEGER 201 <SQL_ATTR_CONNECTION_POOLING> SQLPOINTER 2 <SQL_CP_ONE_PER_HENV> SQLINTEGER 0 php-cgi fc8-204c EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS) SQLHENV 0x0000000000000000 SQLINTEGER 201 <SQL_ATTR_CONNECTION_POOLING> SQLPOINTER 2 <SQL_CP_ONE_PER_HENV> SQLINTEGER 0 php-cgi fc8-204c ENTER SQLAllocEnv HENV * 0x000001100587A280 php-cgi fc8-204c EXIT SQLAllocEnv with return code 0 (SQL_SUCCESS) HENV * 0x000001100587A280 ( 0x00000110053F8190) php-cgi fc8-204c ENTER SQLAllocConnect HENV 0x00000110053F8190 HDBC * 0x000001100587A288 php-cgi fc8-204c EXIT SQLAllocConnect with return code 0 (SQL_SUCCESS) HENV 0x00000110053F8190 HDBC * 0x000001100587A288 ( 0x00000110053F8270) php-cgi fc8-204c ENTER SQLConnectW HDBC 0x00000110053F8270 WCHAR * 0x00000110053F6850 [ -3] "RamsesLocal64bit\ 0" SWORD -3 WCHAR * 0x00007FFDFD16CF80 [ -3] "******\ 0" SWORD -3 WCHAR * 0x00007FFDFD16CF80 [ -3] "******\ 0" SWORD -3 php-cgi fc8-204c EXIT SQLConnectW with return code 1 (SQL_SUCCESS_WITH_INFO) HDBC 0x00000110053F8270 WCHAR * 0x00000110053F6850 [ -3] "RamsesLocal64bit\ 0" SWORD -3 WCHAR * 0x00007FFDFD16CF80 [ -3] "******\ 0" SWORD -3 WCHAR * 0x00007FFDFD16CF80 [ -3] "******\ 0" SWORD -3 DIAG [01000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Changed database context to 'master'. (5701) DIAG [01000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Changed language setting to us_english. (5703) php-cgi fc8-204c ENTER SQLAllocHandle SQLSMALLINT 3 <SQL_HANDLE_STMT> SQLHANDLE 0x00000110053F8270 SQLHANDLE * 0x000001100585C118 php-cgi fc8-204c EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS) SQLSMALLINT 3 <SQL_HANDLE_STMT> SQLHANDLE 0x00000110053F8270 SQLHANDLE * 0x000001100585C118 ( 0x0000011006583100) php-cgi fc8-204c ENTER SQLGetInfoW HDBC 0x00000110053F8270 UWORD 8 <SQL_FETCH_DIRECTION> PTR 0x00000001729FC6F0 SWORD 4 SWORD * 0x00000001729FC640 php-cgi fc8-204c EXIT SQLGetInfoW with return code 0 (SQL_SUCCESS) HDBC 0x00000110053F8270 UWORD 8 <SQL_FETCH_DIRECTION> PTR 0x00000001729FC6F0 ( 0x00000110000000BF) SWORD 4 SWORD * 0x00000001729FC640 (4) php-cgi fc8-204c ENTER SQLSetStmtOption HSTMT 0x0000011006583100 UWORD 6 <SQL_CURSOR_TYPE> SQLPOINTER 3 <SQL_CURSOR_STATIC> php-cgi fc8-204c EXIT SQLSetStmtOption with return code 0 (SQL_SUCCESS) HSTMT 0x0000011006583100 UWORD 6 <SQL_CURSOR_TYPE> SQLPOINTER 3 <SQL_CURSOR_STATIC> php-cgi fc8-204c ENTER SQLExecDirect HSTMT 0x0000011006583100 UCHAR * 0x000001100586C0B8 [ -3] "set nocount on\ d\ a\ 9create table #t(i int, txt varchar(max))\ d\ a\ 9insert into #t values(101,'Any text')\ d\ a\ 9select i,txt from #t\ d\ a\ 9\ 0" SDWORD -3 php-cgi fc8-204c EXIT SQLExecDirect with return code 1 (SQL_SUCCESS_WITH_INFO) HSTMT 0x0000011006583100 UCHAR * 0x000001100586C0B8 [ -3] "set nocount on\ d\ a\ 9create table #t(i int, txt varchar(max))\ d\ a\ 9insert into #t values(101,'Any text')\ d\ a\ 9select i,txt from #t\ d\ a\ 9\ 0" SDWORD -3 DIAG [01S02] [Microsoft][SQL Server Native Client 11.0]Cursor type changed (0) php-cgi fc8-204c ENTER SQLNumResultCols HSTMT 0x0000011006583100 SWORD * 0x000001100585C128 php-cgi fc8-204c EXIT SQLNumResultCols with return code 0 (SQL_SUCCESS) HSTMT 0x0000011006583100 SWORD * 0x000001100585C128 (2) php-cgi fc8-204c ENTER SQLColAttribute SQLHSTMT 0x0000011006583100 SQLSMALLINT 1 SQLSMALLINT 1011 <SQL_DESC_NAME> SQLPOINTER 0x000001100587A500 SQLSMALLINT 256 SQLSMALLINT * 0x00000001729FC5A8 SQLPOINTER [Unknown attribute 1011] php-cgi fc8-204c EXIT SQLColAttribute with return code 0 (SQL_SUCCESS) SQLHSTMT 0x0000011006583100 SQLSMALLINT 1 SQLSMALLINT 1011 <SQL_DESC_NAME> SQLPOINTER 0x000001100587A500 SQLSMALLINT 256 SQLSMALLINT * 0x00000001729FC5A8 (1) SQLPOINTER [Unknown attribute 1011] php-cgi fc8-204c ENTER SQLColAttribute SQLHSTMT 0x0000011006583100 SQLSMALLINT 1 SQLSMALLINT 2 <SQL_DESC_CONCISE_TYPE> SQLPOINTER 0x0000000000000000 SQLSMALLINT 0 SQLSMALLINT * 0x0000000000000000 SQLPOINTER 0x000001100587A610 php-cgi fc8-204c EXIT SQLColAttribute with return code 0 (SQL_SUCCESS) SQLHSTMT 0x0000011006583100 SQLSMALLINT 1 SQLSMALLINT 2 <SQL_DESC_CONCISE_TYPE> SQLPOINTER 0x0000000000000000 SQLSMALLINT 0 SQLSMALLINT * 0x0000000000000000 SQLPOINTER 0x000001100587A610 (4) <SQL_INTEGER> php-cgi fc8-204c ENTER SQLColAttribute SQLHSTMT 0x0000011006583100 SQLSMALLINT 1 SQLSMALLINT 6 <SQL_DESC_DISPLAY_SIZE> SQLPOINTER 0x0000000000000000 SQLSMALLINT 0 SQLSMALLINT * 0x0000000000000000 SQLPOINTER 0x00000001729FC5A0 php-cgi fc8-204c EXIT SQLColAttribute with return code 0 (SQL_SUCCESS) SQLHSTMT 0x0000011006583100 SQLSMALLINT 1 SQLSMALLINT 6 <SQL_DESC_DISPLAY_SIZE> SQLPOINTER 0x0000000000000000 SQLSMALLINT 0 SQLSMALLINT * 0x0000000000000000 SQLPOINTER 0x00000001729FC5A0 (11) php-cgi fc8-204c ENTER SQLBindCol HSTMT 0x0000011006583100 UWORD 1 SWORD 1 <SQL_C_CHAR> PTR 0x0000011005869010 SQLLEN 12 SQLLEN * 0x000001100587A608 php-cgi fc8-204c EXIT SQLBindCol with return code 0 (SQL_SUCCESS) HSTMT 0x0000011006583100 UWORD 1 SWORD 1 <SQL_C_CHAR> PTR 0x0000011005869010 SQLLEN 12 SQLLEN * 0x000001100587A608 (0) php-cgi fc8-204c ENTER SQLColAttribute SQLHSTMT 0x0000011006583100 SQLSMALLINT 2 SQLSMALLINT 1011 <SQL_DESC_NAME> SQLPOINTER 0x000001100587A618 SQLSMALLINT 256 SQLSMALLINT * 0x00000001729FC5A8 SQLPOINTER [Unknown attribute 1011] php-cgi fc8-204c EXIT SQLColAttribute with return code 0 (SQL_SUCCESS) SQLHSTMT 0x0000011006583100 SQLSMALLINT 2 SQLSMALLINT 1011 <SQL_DESC_NAME> SQLPOINTER 0x000001100587A618 SQLSMALLINT 256 SQLSMALLINT * 0x00000001729FC5A8 (3) SQLPOINTER [Unknown attribute 1011] php-cgi fc8-204c ENTER SQLColAttribute SQLHSTMT 0x0000011006583100 SQLSMALLINT 2 SQLSMALLINT 2 <SQL_DESC_CONCISE_TYPE> SQLPOINTER 0x0000000000000000 SQLSMALLINT 0 SQLSMALLINT * 0x0000000000000000 SQLPOINTER 0x000001100587A728 php-cgi fc8-204c EXIT SQLColAttribute with return code 0 (SQL_SUCCESS) SQLHSTMT 0x0000011006583100 SQLSMALLINT 2 SQLSMALLINT 2 <SQL_DESC_CONCISE_TYPE> SQLPOINTER 0x0000000000000000 SQLSMALLINT 0 SQLSMALLINT * 0x0000000000000000 SQLPOINTER 0x000001100587A728 (12) <SQL_VARCHAR> php-cgi fc8-204c ENTER SQLColAttribute SQLHSTMT 0x0000011006583100 SQLSMALLINT 2 SQLSMALLINT 1013 <SQL_DESC_OCTET_LENGTH> SQLPOINTER 0x0000000000000000 SQLSMALLINT 0 SQLSMALLINT * 0x0000000000000000 SQLPOINTER [Unknown attribute 1013] php-cgi fc8-204c EXIT SQLColAttribute with return code 0 (SQL_SUCCESS) SQLHSTMT 0x0000011006583100 SQLSMALLINT 2 SQLSMALLINT 1013 <SQL_DESC_OCTET_LENGTH> SQLPOINTER 0x0000000000000000 SQLSMALLINT 0 SQLSMALLINT * 0x0000000000000000 SQLPOINTER [Unknown attribute 1013] php-cgi fc8-204c ENTER SQLBindCol HSTMT 0x0000011006583100 UWORD 2 SWORD 1 <SQL_C_CHAR> PTR 0x0000011005801010 SQLLEN 1 SQLLEN * 0x000001100587A720 php-cgi fc8-204c EXIT SQLBindCol with return code 0 (SQL_SUCCESS) HSTMT 0x0000011006583100 UWORD 2 SWORD 1 <SQL_C_CHAR> PTR 0x0000011005801010 SQLLEN 1 SQLLEN * 0x000001100587A720 (0) php-cgi fc8-204c ENTER SQLExtendedFetch HSTMT 0x0000011006583100 UWORD 1 <SQL_FETCH_NEXT> SQLLEN 1 SQLULEN * 0x00000001729FC680 UWORD * 0x00000001729FC700 php-cgi fc8-204c EXIT SQLExtendedFetch with return code 1 (SQL_SUCCESS_WITH_INFO) HSTMT 0x0000011006583100 UWORD 1 <SQL_FETCH_NEXT> SQLLEN 1 SQLULEN * 0x00000001729FC680 (1) UWORD * 0x00000001729FC700 (5) DIAG [01004] [Microsoft][SQL Server Native Client 11.0]String data, right truncation (0) php-cgi fc8-204c ENTER SQLFreeStmt HSTMT 0x0000011006583100 UWORD 1 <SQL_DROP> php-cgi fc8-204c EXIT SQLFreeStmt with return code 0 (SQL_SUCCESS) HSTMT 0x0000011006583100 UWORD 1 <SQL_DROP> php-cgi fc8-204c ENTER SQLDisconnect HDBC 0x00000110053F8270 php-cgi fc8-204c EXIT SQLDisconnect with return code 0 (SQL_SUCCESS) HDBC 0x00000110053F8270 php-cgi fc8-204c ENTER SQLFreeConnect HDBC 0x00000110053F8270 php-cgi fc8-204c EXIT SQLFreeConnect with return code 0 (SQL_SUCCESS) HDBC 0x00000110053F8270 php-cgi fc8-204c ENTER SQLFreeEnv HENV 0x00000110053F8190 php-cgi fc8-204c EXIT SQLFreeEnv with return code 0 (SQL_SUCCESS) HENV 0x00000110053F8190 Previous Comments: ------------------------------------------------------------------------ [2016-12-12 21:45:37] ab@php.net Thanks for the report. For completeness, could you please also post an ODBC trace? Thanks. ------------------------------------------------------------------------ [2016-12-12 16:10:31] honza dot hink at gmail dot com Related to MS SQL - all versions from 2005 to 2014 ------------------------------------------------------------------------ [2016-12-12 16:06:45] honza dot hink at gmail dot com Description: ------------ If result set contains a column type varchar(max) then all functions (odbc_fetch_array, odbc_fetch_row etc.) return some random bytes. It looks like buffer overrun. If you change declaration varchar(max) to varchar(200) then it will work. Very old bug, I hopped it will be finally fixed in PHP 7, but wainly. Test script: --------------- <?php $con=odbc_connect("Local64bit","you","yourPWD"); $res=odbc_do($con,"set nocount on create table #t(i int, txt varchar(max)) insert into #t values(101,'Any text') select i,txt from #t "); $r=odbc_fetch_array($res); print_r($r); ?> Expected result: ---------------- Array ( [i] => 101 [txt] => Any text ) Actual result: -------------- Array ( [i] => 101 [txt] => €k ) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=73725&edit=1

« previous php.bugs (#205959) next »