From 68bb42b2cf50bf05996f5d44906b12561731e6f2 Mon Sep 17 00:00:00 2001 From: David Puglielli Date: Tue, 26 Sep 2017 18:33:49 -0700 Subject: [PATCH] Moved check to core_sqlsrv_next_result to avoid suppressing a different error message --- source/pdo_sqlsrv/pdo_stmt.cpp | 12 ------------ source/shared/core_stmt.cpp | 12 ++++++++++++ source/sqlsrv/stmt.cpp | 12 ------------ 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/source/pdo_sqlsrv/pdo_stmt.cpp b/source/pdo_sqlsrv/pdo_stmt.cpp index b74ca360..78828a02 100644 --- a/source/pdo_sqlsrv/pdo_stmt.cpp +++ b/source/pdo_sqlsrv/pdo_stmt.cpp @@ -1067,18 +1067,6 @@ int pdo_sqlsrv_stmt_next_rowset( _Inout_ pdo_stmt_t *stmt TSRMLS_DC ) SQLSRV_ASSERT( driver_stmt != NULL, "pdo_sqlsrv_stmt_next_rowset: driver_data object was null" ); - // Make sure that the result set is not null. Null means SQLNumResultCols returns 0 - // and SQLRowCount is not > 0. Normally this error is handled in core_sqlsrv_fetch(), - // but if the user calls nextRowset() before fetch() the error is never shown - // so we handle it here. - bool has_result = core_sqlsrv_has_any_result( driver_stmt ); - - if(!driver_stmt->fetch_called){ - CHECK_CUSTOM_ERROR( !has_result, driver_stmt, SQLSRV_ERROR_NO_FIELDS ) { - throw core::CoreException(); - } - } - core_sqlsrv_next_result( static_cast( stmt->driver_data ) TSRMLS_CC ); // clear the current meta data since the new result will generate new meta data diff --git a/source/shared/core_stmt.cpp b/source/shared/core_stmt.cpp index 29255029..7648ea32 100644 --- a/source/shared/core_stmt.cpp +++ b/source/shared/core_stmt.cpp @@ -1058,6 +1058,18 @@ void core_sqlsrv_next_result( _Inout_ sqlsrv_stmt* stmt TSRMLS_DC, _In_ bool fin throw core::CoreException(); } + // Make sure that the result set is not null. Null means SQLNumResultCols returns 0 + // and SQLRowCount is not > 0. Normally this error is handled in core_sqlsrv_fetch(), + // but if the user calls nextRowset() before fetch() the error is never shown + // so we handle it here. + bool has_result = core_sqlsrv_has_any_result( stmt ); + + if(!driver_stmt->fetch_called){ + CHECK_CUSTOM_ERROR( !has_result, stmt, SQLSRV_ERROR_NO_FIELDS ) { + throw core::CoreException(); + } + } + close_active_stream( stmt TSRMLS_CC ); //Clear column sql types and sql display sizes. diff --git a/source/sqlsrv/stmt.cpp b/source/sqlsrv/stmt.cpp index 07aea0d8..a548bfc6 100644 --- a/source/sqlsrv/stmt.cpp +++ b/source/sqlsrv/stmt.cpp @@ -561,18 +561,6 @@ PHP_FUNCTION( sqlsrv_next_result ) try { - // Make sure that the result set is not null. Null means SQLNumResultCols returns 0 - // and SQLRowCount is not > 0. Normally this error is handled in core_sqlsrv_fetch(), - // but if the user calls sqlsrv_next_result() before fetch() the error is never shown - // so we handle it here. - bool has_result = core_sqlsrv_has_any_result( stmt ); - - if(!stmt->fetch_called){ - CHECK_CUSTOM_ERROR( !has_result, stmt, SQLSRV_ERROR_NO_FIELDS ) { - throw core::CoreException(); - } - } - core_sqlsrv_next_result( stmt TSRMLS_CC, true ); if( stmt->past_next_result_end ) {