ID: 46195 User updated by: marcus dot kunze at syntela dot de Reported By: marcus dot kunze at syntela dot de Status: Assigned Bug Type: ODBC related Operating System: Windows PHP Version: 5.2.6 Assigned To: iodbc New Comment:
Hallo, if the result depends on parameter from Execute, SQLNumResultCols can not return die correct result. Sample: create procedure test ( @param int ) as if @param = 1 select 1 as col1 else if @param = 2 select 2 as col2 else if @param = 3 select 3 as col3 else select 'other' as other odbc_prepare('exec test(?)'); bevor not execute with the paramter vor ?, SQLNumResultCols can not have the name vor the column. Previous Comments: ------------------------------------------------------------------------ [2008-11-07 12:03:43] [EMAIL PROTECTED] Strictly speaking from an ODBC API point of view, you can call SQLNumResultCols directly after SQLPrepare, but not all drivers/databases evaluate the SQL statement at prepare time and therefor can only return this information after SQLExecute. I am working on a patch that will resolve calling SQLNumResultCols and more importantly the odbc_bindcols call multiple times, without the possibility of breaking backward compatibility on existing apps. ------------------------------------------------------------------------ [2008-09-29 12:09:01] marcus dot kunze at syntela dot de Description: ------------ odbc_prepare use SQLNumResultCols to get the count and description of den result column. The problem is a resultset the is depends on the paremeter or a multiple resultset with differens column. SQLNumResultCols return only the correct result after SQLExecute is call! In odbc_execute is the same code, the code in odbc_prepare is needless. Testet Solution on Windows, SQL Server 2005 php_odbc.c[908] result->numcols = 0; /* SQLNumResultCols(result->stmt, &(result->numcols)); if (result->numcols > 0) { if (!odbc_bindcols(result TSRMLS_CC)) { efree(result); RETURN_FALSE; } } else { result->values = NULL; } */ zend_list_addref(conn->id); Reproduce code: --------------- $connstr = "Driver={SQL Server};SERVER=localhost;DATABASE=master"; $sql = "select 1 as col1 \n". "select 2 as col2, 3 as col3 \n". "select 4 as col4, 5 as col5, 6 as col6"; $conn = odbc_connect($connstr, $username, $password); $result = odbc_prepare($conn, $sql ); odbc_execute( $result ); do { odbc_result_all( $result ); } while ( odbc_next_result( $result ) ); Expected result: ---------------- col1 1 col2 col3 2 3 col4 col5 col6 4 5 6 Actual result: -------------- col4 col5 col6 1 ÷xÈøx4[ú øx÷x4[ú col2 col3 2 3 col4 col5 col6 4 5 6 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=46195&edit=1