diff --git a/source/pdo_sqlsrv/pdo_dbh.cpp b/source/pdo_sqlsrv/pdo_dbh.cpp index 0a12576b..fbc3b550 100644 --- a/source/pdo_sqlsrv/pdo_dbh.cpp +++ b/source/pdo_sqlsrv/pdo_dbh.cpp @@ -436,7 +436,7 @@ const connection_option PDO_CONN_OPTS[] = { }; -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 // close the connection int pdo_sqlsrv_dbh_close(_Inout_ pdo_dbh_t *dbh); @@ -668,7 +668,7 @@ int pdo_sqlsrv_db_handle_factory( _Inout_ pdo_dbh_t *dbh, _In_opt_ zval *driver_ // dbh - The PDO managed connection object. // Return: // Always returns 1 for success. (for PHP_VERSION_ID < 80100) -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int pdo_sqlsrv_dbh_close( _Inout_ pdo_dbh_t *dbh ) #else void pdo_sqlsrv_dbh_close(_Inout_ pdo_dbh_t *dbh) @@ -678,7 +678,7 @@ void pdo_sqlsrv_dbh_close(_Inout_ pdo_dbh_t *dbh) // if the connection didn't complete properly, driver_data isn't initialized. if( dbh->driver_data == NULL ) { -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 1; #else return; @@ -691,7 +691,7 @@ void pdo_sqlsrv_dbh_close(_Inout_ pdo_dbh_t *dbh) core_sqlsrv_close( reinterpret_cast( dbh->driver_data ) ); dbh->driver_data = NULL; -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 // always return success that the connection is closed return 1; #endif @@ -708,7 +708,7 @@ void pdo_sqlsrv_dbh_close(_Inout_ pdo_dbh_t *dbh) // driver_options - User provided list of statement options. // Return: // 0 for failure, 1 for success. -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int pdo_sqlsrv_dbh_prepare(_Inout_ pdo_dbh_t *dbh, _In_reads_(sql_len) const char *sql, _Inout_ size_t sql_len, _Inout_ pdo_stmt_t *stmt, _In_ zval *driver_options) #else @@ -755,10 +755,10 @@ bool pdo_sqlsrv_dbh_prepare(_Inout_ pdo_dbh_t *dbh, _In_ zend_string *sql_zstr, driver_stmt->buffered_query_limit = driver_dbh->client_buffer_max_size; } -#if PHP_VERSION_ID >= 80100 +#if PHP_VERSION_ID >= 80100 zend_string* sql_rewrite_zstr = NULL; - const char* sql = ZSTR_VAL(sql_zstr); - size_t sql_len = ZSTR_LEN(sql_zstr); + const char* sql = ZSTR_VAL(sql_zstr); + size_t sql_len = ZSTR_LEN(sql_zstr); #endif // rewrite named parameters in the query to positional parameters if we aren't letting PDO do the @@ -767,7 +767,7 @@ bool pdo_sqlsrv_dbh_prepare(_Inout_ pdo_dbh_t *dbh, _In_ zend_string *sql_zstr, // rewrite the query to map named parameters to positional parameters. We do this rather than use the ODBC named // parameters for consistency with the PDO MySQL and PDO ODBC drivers. -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int zr = pdo_parse_params( stmt, const_cast( sql ), sql_len, &sql_rewrite, &sql_rewrite_len ); CHECK_ZEND_ERROR(zr, driver_dbh, PDO_SQLSRV_ERROR_PARAM_PARSE) { throw core::CoreException(); @@ -804,8 +804,8 @@ bool pdo_sqlsrv_dbh_prepare(_Inout_ pdo_dbh_t *dbh, _In_ zend_string *sql_zstr, driver_stmt->direct_query_subst_string = estrdup( sql ); driver_stmt->direct_query_subst_string_len = sql_len; } - -#if PHP_VERSION_ID >= 80100 + +#if PHP_VERSION_ID >= 80100 if (sql_rewrite_zstr != NULL) { zend_string_release(sql_rewrite_zstr); } @@ -817,7 +817,7 @@ bool pdo_sqlsrv_dbh_prepare(_Inout_ pdo_dbh_t *dbh, _In_ zend_string *sql_zstr, // parse placeholders in the sql query into the placeholders ht ALLOC_HASHTABLE( placeholders ); core::sqlsrv_zend_hash_init(*driver_dbh, placeholders, 5, ZVAL_PTR_DTOR /* dtor */, 0 /* persistent */); -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 sql_parser = new (sqlsrv_malloc(sizeof(sql_string_parser))) sql_string_parser(*driver_dbh, stmt->query_string, static_cast(stmt->query_stringlen), placeholders); #else @@ -849,7 +849,7 @@ bool pdo_sqlsrv_dbh_prepare(_Inout_ pdo_dbh_t *dbh, _In_ zend_string *sql_zstr, reinterpret_cast( driver_dbh->last_error()->sqlstate )); } -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 0; #else return false; @@ -862,7 +862,7 @@ bool pdo_sqlsrv_dbh_prepare(_Inout_ pdo_dbh_t *dbh, _In_ zend_string *sql_zstr, DIE( "pdo_sqlsrv_dbh_prepare: Unknown exception caught." ); } -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 1; #else return true; @@ -880,7 +880,7 @@ bool pdo_sqlsrv_dbh_prepare(_Inout_ pdo_dbh_t *dbh, _In_ zend_string *sql_zstr, // sql_len - length of sql query // Return // # of rows affected, -1 for an error. -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 zend_long pdo_sqlsrv_dbh_do( _Inout_ pdo_dbh_t *dbh, _In_reads_bytes_(sql_len) const char *sql, _In_ size_t sql_len ) #else zend_long pdo_sqlsrv_dbh_do(_Inout_ pdo_dbh_t *dbh, _In_ const zend_string *sql) @@ -912,7 +912,7 @@ zend_long pdo_sqlsrv_dbh_do(_Inout_ pdo_dbh_t *dbh, _In_ const zend_string *sql) NULL /*valid_stmt_opts*/, pdo_sqlsrv_handle_stmt_error, &temp_stmt ); driver_stmt->set_func( __FUNCTION__ ); -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 SQLRETURN execReturn = core_sqlsrv_execute(driver_stmt, sql, static_cast(sql_len)); #else SQLRETURN execReturn = core_sqlsrv_execute(driver_stmt, ZSTR_VAL(sql), ZSTR_LEN(sql)); @@ -977,7 +977,7 @@ zend_long pdo_sqlsrv_dbh_do(_Inout_ pdo_dbh_t *dbh, _In_ const zend_string *sql) // Return: // 0 for failure and 1 for success. (if PHP_VERSION_ID < 80100) // Return true if currently inside a transaction, false otherwise -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int pdo_sqlsrv_dbh_begin(_Inout_ pdo_dbh_t *dbh) #else bool pdo_sqlsrv_dbh_begin(_Inout_ pdo_dbh_t *dbh) @@ -999,14 +999,14 @@ bool pdo_sqlsrv_dbh_begin(_Inout_ pdo_dbh_t *dbh) core_sqlsrv_begin_transaction( driver_conn ); -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 1; #else return true; #endif } catch( core::CoreException& ) { -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 0; #else return false; @@ -1017,7 +1017,7 @@ bool pdo_sqlsrv_dbh_begin(_Inout_ pdo_dbh_t *dbh) DIE ("pdo_sqlsrv_dbh_begin: Uncaught exception occurred."); } // Should not have reached here but adding this due to compilation warnings -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 0; #else return false; @@ -1037,7 +1037,7 @@ bool pdo_sqlsrv_dbh_begin(_Inout_ pdo_dbh_t *dbh) // Return: // 0 for failure and 1 for success. (if PHP_VERSION_ID < 80100) // Return true for success and false otherwise -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int pdo_sqlsrv_dbh_commit(_Inout_ pdo_dbh_t *dbh) #else bool pdo_sqlsrv_dbh_commit(_Inout_ pdo_dbh_t *dbh) @@ -1059,14 +1059,14 @@ bool pdo_sqlsrv_dbh_commit(_Inout_ pdo_dbh_t *dbh) core_sqlsrv_commit( driver_conn ); -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 1; #else return true; #endif } catch( core::CoreException& ) { -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 0; #else return false; @@ -1078,7 +1078,7 @@ bool pdo_sqlsrv_dbh_commit(_Inout_ pdo_dbh_t *dbh) } // Should not have reached here but adding this due to compilation warnings -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 0; #else return false; @@ -1096,7 +1096,7 @@ bool pdo_sqlsrv_dbh_commit(_Inout_ pdo_dbh_t *dbh) // Return: // 0 for failure and 1 for success. (if PHP_VERSION_ID < 80100) // Return true for success and false otherwise -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int pdo_sqlsrv_dbh_rollback(_Inout_ pdo_dbh_t *dbh) #else bool pdo_sqlsrv_dbh_rollback(_Inout_ pdo_dbh_t *dbh) @@ -1117,7 +1117,7 @@ bool pdo_sqlsrv_dbh_rollback(_Inout_ pdo_dbh_t *dbh) core_sqlsrv_rollback( driver_conn ); -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 1; #else return true; @@ -1125,7 +1125,7 @@ bool pdo_sqlsrv_dbh_rollback(_Inout_ pdo_dbh_t *dbh) } catch( core::CoreException& ) { -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 0; #else return false; @@ -1136,7 +1136,7 @@ bool pdo_sqlsrv_dbh_rollback(_Inout_ pdo_dbh_t *dbh) DIE ("pdo_sqlsrv_dbh_rollback: Uncaught exception occurred."); } // Should not have reached here but adding this due to compilation warnings -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 0; #else return false; @@ -1154,7 +1154,7 @@ bool pdo_sqlsrv_dbh_rollback(_Inout_ pdo_dbh_t *dbh) // Return: // 0 for failure, 1 for success. (if PHP_VERSION_ID < 80100) // Return true on success and false in case of failure -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int pdo_sqlsrv_dbh_set_attr(_Inout_ pdo_dbh_t *dbh, _In_ zend_long attr, _Inout_ zval *val) #else bool pdo_sqlsrv_dbh_set_attr(_Inout_ pdo_dbh_t *dbh, _In_ zend_long attr, _Inout_ zval *val) @@ -1305,14 +1305,14 @@ bool pdo_sqlsrv_dbh_set_attr(_Inout_ pdo_dbh_t *dbh, _In_ zend_long attr, _Inout } } catch( pdo::PDOException& ) { -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 0; #else return false; #endif } -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 1; #else return true; @@ -1354,7 +1354,7 @@ int pdo_sqlsrv_dbh_get_attr(_Inout_ pdo_dbh_t *dbh, _In_ zend_long attr, _Inout_ case PDO_ATTR_AUTOCOMMIT: case PDO_ATTR_TIMEOUT: { -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 // PDO does not throw "not supported" error message for these attributes. THROW_PDO_ERROR(driver_dbh, PDO_SQLSRV_ERROR_UNSUPPORTED_DBH_ATTR); #else @@ -1465,14 +1465,14 @@ int pdo_sqlsrv_dbh_get_attr(_Inout_ pdo_dbh_t *dbh, _In_ zend_long attr, _Inout_ } } -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 1; #else return 1; #endif } catch( core::CoreException& ) { -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 0; #else return -1; @@ -1488,7 +1488,7 @@ int pdo_sqlsrv_dbh_get_attr(_Inout_ pdo_dbh_t *dbh, _In_ zend_long attr, _Inout_ // info - zval in which to return the error info. // Return: // 0 for failure, 1 for success. -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int pdo_sqlsrv_dbh_return_error(_In_ pdo_dbh_t *dbh, _In_opt_ pdo_stmt_t *stmt, _Out_ zval *info) #else void pdo_sqlsrv_dbh_return_error(_In_ pdo_dbh_t *dbh, _In_opt_ pdo_stmt_t *stmt, _Out_ zval *info) @@ -1506,7 +1506,7 @@ void pdo_sqlsrv_dbh_return_error(_In_ pdo_dbh_t *dbh, _In_opt_ pdo_stmt_t *stmt, pdo_sqlsrv_retrieve_context_error( ctx_error, info ); -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 1; #endif } @@ -1521,7 +1521,7 @@ void pdo_sqlsrv_dbh_return_error(_In_ pdo_dbh_t *dbh, _In_opt_ pdo_stmt_t *stmt, // Return: // Returns the last insert id as a string. (if PHP_VERSION_ID < 80100) // Returning NULL indicates an error condition. The input "name" MIGHT be NULL -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 char * pdo_sqlsrv_dbh_last_id(_Inout_ pdo_dbh_t *dbh, _In_z_ const char *name, _Out_ size_t* len) #else zend_string * pdo_sqlsrv_dbh_last_id(_Inout_ pdo_dbh_t *dbh, _In_ const zend_string *name) @@ -1552,7 +1552,7 @@ zend_string * pdo_sqlsrv_dbh_last_id(_Inout_ pdo_dbh_t *dbh, _In_ const zend_str wsql_string = utf16_string_from_mbcs_string(SQLSRV_ENCODING_CHAR, LAST_INSERT_ID_QUERY, sizeof(LAST_INSERT_ID_QUERY), &wsql_len); } else { char buffer[LAST_INSERT_ID_QUERY_MAX_LEN] = { '\0' }; -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 snprintf(buffer, LAST_INSERT_ID_QUERY_MAX_LEN, SEQUENCE_CURRENT_VALUE_QUERY, name); #else const char *name_str = ZSTR_VAL(name); @@ -1575,7 +1575,7 @@ zend_string * pdo_sqlsrv_dbh_last_id(_Inout_ pdo_dbh_t *dbh, _In_ const zend_str // execute the last insert id query core::SQLExecDirectW( driver_stmt, wsql_string ); core::SQLFetchScroll( driver_stmt, SQL_FETCH_NEXT, 0 ); - + SQLRETURN r = core::SQLGetData(driver_stmt, 1, SQL_C_CHAR, idSTR, LAST_INSERT_ID_BUFF_LEN, &cbID, false); CHECK_CUSTOM_ERROR((!SQL_SUCCEEDED(r) || cbID == SQL_NULL_DATA || cbID == SQL_NO_TOTAL), driver_stmt, PDO_SQLSRV_ERROR_LAST_INSERT_ID) { @@ -1593,7 +1593,7 @@ zend_string * pdo_sqlsrv_dbh_last_id(_Inout_ pdo_dbh_t *dbh, _In_ const zend_str if( driver_stmt ) { driver_stmt->~sqlsrv_stmt(); } -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 *len = 0; str = reinterpret_cast(sqlsrv_malloc(0, sizeof(char), 1)); // return an empty string with a null terminator str[0] = '\0'; @@ -1606,11 +1606,11 @@ zend_string * pdo_sqlsrv_dbh_last_id(_Inout_ pdo_dbh_t *dbh, _In_ const zend_str // restore error handling to its previous mode dbh->error_mode = prev_err_mode; - // copy the last ID string and return it + // copy the last ID string and return it str = reinterpret_cast(sqlsrv_malloc(cbID, sizeof(char), 1)); // include space for null terminator strcpy_s(str, cbID + 1, idSTR); - -#if PHP_VERSION_ID < 80100 + +#if PHP_VERSION_ID < 80100 *len = static_cast(cbID); return str; #else @@ -1631,7 +1631,7 @@ zend_string * pdo_sqlsrv_dbh_last_id(_Inout_ pdo_dbh_t *dbh, _In_ const zend_str // quoted_len - Length of the output string. // Return: // 0 for failure, 1 for success. -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int pdo_sqlsrv_dbh_quote( _Inout_ pdo_dbh_t* dbh, _In_reads_(unquoted_len) const char* unquoted, _In_ size_t unquoted_len, _Outptr_result_buffer_(*quoted_len) char **quoted, _Out_ size_t* quoted_len, enum pdo_param_type paramtype ) #else @@ -1713,60 +1713,61 @@ zend_string* pdo_sqlsrv_dbh_quote(_Inout_ pdo_dbh_t* dbh, _In_ const zend_string } #endif - if (encoding == SQLSRV_ENCODING_BINARY) { -#if PHP_VERSION_ID < 80100 - *quoted_len = (unquoted_len * 2) + 2; // each character will be converted to 2 hex digits and prepend '0x' to the result - *quoted = reinterpret_cast(sqlsrv_malloc(*quoted_len, sizeof(char), 1)); // include space for null terminator - memset(*quoted, '\0', *quoted_len + 1); - - unsigned int pos = 0; - (*quoted)[pos++] = '0'; - (*quoted)[pos++] = 'x'; - - for (size_t index = 0; index < unquoted_len && unquoted[index] != '\0'; ++index) { - // On success, snprintf returns the total number of characters written - // On failure, a negative number is returned - // The generated string has a length of at most len - 1, so + if (encoding == SQLSRV_ENCODING_BINARY) { +#if PHP_VERSION_ID < 80100 + *quoted_len = (unquoted_len * 2) + 2; // each character will be converted to 2 hex digits and prepend '0x' to the result + *quoted = reinterpret_cast(sqlsrv_malloc(*quoted_len, sizeof(char), 1)); // include space for null terminator + memset(*quoted, '\0', *quoted_len + 1); + + unsigned int pos = 0; + (*quoted)[pos++] = '0'; + (*quoted)[pos++] = 'x'; + + for (size_t index = 0; index < unquoted_len && unquoted[index] != '\0'; ++index) { + // On success, snprintf returns the total number of characters written + // On failure, a negative number is returned + // The generated string has a length of at most len - 1, so // len is 3 (2 hex digits + 1) // Requires "& 0x000000FF", or snprintf will translate "0x90" to "0xFFFFFF90" int n = snprintf((char*)(*quoted + pos), 3, "%02X", unquoted[index] & 0x000000FF); - if (n < 0) { - // Something went wrong, simply return 0 (failure) - return 0; - } - pos += 2; - } - - return 1; + if (n < 0) { + // Something went wrong, simply return 0 (failure) + return 0; + } + pos += 2; + } + + return 1; #else - size_t unquoted_len = ZSTR_LEN(unquoted); + size_t unquoted_len = ZSTR_LEN(unquoted); const char *unquoted_str = ZSTR_VAL(unquoted); - sqlsrv_malloc_auto_ptr quoted; + sqlsrv_malloc_auto_ptr quoted; size_t quoted_len = (unquoted_len * 2) + 2; // each character will be converted to 2 hex digits and prepend '0x' to the result - quoted = reinterpret_cast(sqlsrv_malloc(quoted_len, sizeof(char), 1)); // include space for null terminator - memset(quoted, '\0', quoted_len + 1); + quoted = reinterpret_cast(sqlsrv_malloc(quoted_len, sizeof(char), 1)); // include space for null terminator + memset(quoted, '\0', quoted_len + 1); - unsigned int pos = 0; - quoted[pos++] = '0'; - quoted[pos++] = 'x'; - - char *p = quoted; - for (size_t index = 0; index < unquoted_len && unquoted_str[index] != '\0'; ++index) { - // On success, snprintf returns the total number of characters written - // On failure, a negative number is returned - // The generated string has a length of at most len - 1, so + unsigned int pos = 0; + quoted[pos++] = '0'; + quoted[pos++] = 'x'; + + char *p = quoted; + for (size_t index = 0; index < unquoted_len && unquoted_str[index] != '\0'; ++index) { + // On success, snprintf returns the total number of characters written + // On failure, a negative number is returned + // The generated string has a length of at most len - 1, so // len is 3 (2 hex digits + 1) - int n = snprintf((char*)(p + pos), 3, "%02X", unquoted_str[index]); - if (n < 0) { - // Something went wrong, simply return NULL (failure) - return NULL; - } - pos += 2; - } - - zend_string* zstr = zend_string_init(quoted, quoted_len, 0); - return zstr; + // Requires "& 0x000000FF", or snprintf will translate "0x90" to "0xFFFFFF90" + int n = snprintf((char*)(p + pos), 3, "%02X", unquoted_str[index] & 0x000000FF); + if (n < 0) { + // Something went wrong, simply return NULL (failure) + return NULL; + } + pos += 2; + } + + zend_string* zstr = zend_string_init(quoted, quoted_len, 0); + return zstr; #endif } else { @@ -1775,10 +1776,10 @@ zend_string* pdo_sqlsrv_dbh_quote(_Inout_ pdo_dbh_t* dbh, _In_ const zend_string int quotes_needed = (use_national_char_set) ? 3 : 2; char c = '\''; -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 std::string tmp_str(unquoted, unquoted_len); // Copy all unquoted_len characters from unquoted #else - size_t unquoted_len = ZSTR_LEN(unquoted); + size_t unquoted_len = ZSTR_LEN(unquoted); const char *unquoted_str = ZSTR_VAL(unquoted); std::string tmp_str(unquoted_str, unquoted_len); // Copy all unquoted_len characters from unquoted #endif @@ -1790,18 +1791,18 @@ zend_string* pdo_sqlsrv_dbh_quote(_Inout_ pdo_dbh_t* dbh, _In_ const zend_string } size_t len = tmp_str.length(); -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 *quoted_len = quotes_needed + len; // The new length should be number of quotes plus the length of tmp_str *quoted = reinterpret_cast(sqlsrv_malloc(*quoted_len, sizeof(char), 1)); // include space for null terminator - memset(*quoted, '\0', *quoted_len + 1); + memset(*quoted, '\0', *quoted_len + 1); char *p = *quoted; #else - sqlsrv_malloc_auto_ptr quoted; + sqlsrv_malloc_auto_ptr quoted; size_t quoted_len = quotes_needed + len; // length returned to the caller should not account for null terminator - quoted = reinterpret_cast(sqlsrv_malloc(quoted_len, sizeof(char), 1)); // include space for null terminator - memset(quoted, '\0', quoted_len + 1); - + quoted = reinterpret_cast(sqlsrv_malloc(quoted_len, sizeof(char), 1)); // include space for null terminator + memset(quoted, '\0', quoted_len + 1); + char *p = quoted; #endif size_t pos = 0; @@ -1813,11 +1814,11 @@ zend_string* pdo_sqlsrv_dbh_quote(_Inout_ pdo_dbh_t* dbh, _In_ const zend_string pos += len; *(p + pos) = c; // Add the end quote -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 return 1; #else - zend_string* zstr = zend_string_init(quoted, quoted_len, 0); - return zstr; + zend_string* zstr = zend_string_init(quoted, quoted_len, 0); + return zstr; #endif } } diff --git a/source/pdo_sqlsrv/pdo_stmt.cpp b/source/pdo_sqlsrv/pdo_stmt.cpp index d8ea9b20..9b8a8b31 100644 --- a/source/pdo_sqlsrv/pdo_stmt.cpp +++ b/source/pdo_sqlsrv/pdo_stmt.cpp @@ -278,12 +278,12 @@ int pdo_sqlsrv_stmt_fetch( _Inout_ pdo_stmt_t *stmt, _In_ enum pdo_fetch_orienta int pdo_sqlsrv_stmt_param_hook( _Inout_ pdo_stmt_t *stmt, _Inout_ struct pdo_bound_param_data *param, _In_ enum pdo_param_event event_type ); int pdo_sqlsrv_stmt_describe_col( _Inout_ pdo_stmt_t *stmt, _In_ int colno ); -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int pdo_sqlsrv_stmt_get_col_data( _Inout_ pdo_stmt_t *stmt, _In_ int colno, _Out_writes_bytes_opt_(*len) char **ptr, _Inout_ size_t *len, _Out_opt_ int *caller_frees ); -#else +#else int pdo_sqlsrv_stmt_get_col_data(_Inout_ pdo_stmt_t *stmt, _In_ int colno, _Inout_ zval *result, _Inout_ enum pdo_param_type *type); -#endif +#endif int pdo_sqlsrv_stmt_set_attr( _Inout_ pdo_stmt_t *stmt, _In_ zend_long attr, _Inout_ zval *val ); int pdo_sqlsrv_stmt_get_attr( _Inout_ pdo_stmt_t *stmt, _In_ zend_long attr, _Inout_ zval *return_value ); @@ -458,7 +458,7 @@ int pdo_sqlsrv_stmt_describe_col( _Inout_ pdo_stmt_t *stmt, _In_ int colno) // Set the precision column_data->precision = core_meta_data->field_scale; -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 // Set the param_type column_data->param_type = PDO_PARAM_ZVAL; #endif @@ -557,7 +557,7 @@ int pdo_sqlsrv_stmt_execute( _Inout_ pdo_stmt_t *stmt ) zend_hash_internal_pointer_reset(driver_stmt->placeholders); -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 query = stmt->active_query_string; query_len = static_cast(stmt->active_query_stringlen); #else @@ -663,7 +663,7 @@ int pdo_sqlsrv_stmt_fetch( _Inout_ pdo_stmt_t *stmt, _In_ enum pdo_fetch_orienta pdo_bound_param_data* bind_data = NULL; if( !driver_stmt->bound_column_param_types ) { -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 driver_stmt->bound_column_param_types = reinterpret_cast( sqlsrv_malloc( stmt->column_count, sizeof( pdo_param_type ), 0 )); std::fill( driver_stmt->bound_column_param_types, driver_stmt->bound_column_param_types + stmt->column_count, @@ -679,7 +679,7 @@ int pdo_sqlsrv_stmt_fetch( _Inout_ pdo_stmt_t *stmt, _In_ enum pdo_fetch_orienta for( long i = 0; i < stmt->column_count; ++i ) { -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 if (NULL== (bind_data = reinterpret_cast(zend_hash_index_find_ptr(stmt->bound_columns, i))) && (NULL == (bind_data = reinterpret_cast(zend_hash_find_ptr(stmt->bound_columns, stmt->columns[i].name))))) { @@ -759,7 +759,7 @@ int pdo_sqlsrv_stmt_fetch( _Inout_ pdo_stmt_t *stmt, _In_ enum pdo_fetch_orienta // freeing the memory. // Return: // 0 for failure, 1 for success. -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 int pdo_sqlsrv_stmt_get_col_data( _Inout_ pdo_stmt_t *stmt, _In_ int colno, _Out_writes_bytes_opt_(*len) char **ptr, _Inout_ size_t *len, _Out_opt_ int *caller_frees) #else @@ -783,7 +783,7 @@ int pdo_sqlsrv_stmt_get_col_data(_Inout_ pdo_stmt_t *stmt, _In_ int colno, _Inou return 0; } -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 // Let PDO free the memory after use. * caller_frees = 1; #endif @@ -803,7 +803,7 @@ int pdo_sqlsrv_stmt_get_col_data(_Inout_ pdo_stmt_t *stmt, _In_ int colno, _Inou // if a column is bound to a type different than the column type, figure out a way to convert it to the // type they want -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 if (stmt->bound_columns && driver_stmt->bound_column_param_types[colno] != PDO_PARAM_ZVAL) { #else if (stmt->bound_columns) { @@ -851,7 +851,7 @@ int pdo_sqlsrv_stmt_get_col_data(_Inout_ pdo_stmt_t *stmt, _In_ int colno, _Inou } SQLSRV_PHPTYPE sqlsrv_phptype_out = SQLSRV_PHPTYPE_INVALID; -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 core_sqlsrv_get_field(driver_stmt, colno, sqlsrv_php_type, false, *(reinterpret_cast(ptr)), reinterpret_cast(len), true, &sqlsrv_phptype_out); @@ -1161,7 +1161,7 @@ int pdo_sqlsrv_stmt_get_col_meta( _Inout_ pdo_stmt_t *stmt, _In_ zend_long colno &out_buff_len, &field_type_num ); add_assoc_string( return_value, "table", table_name ); -#if PHP_VERSION_ID < 80100 +#if PHP_VERSION_ID < 80100 if( stmt->columns && stmt->columns[colno].param_type == PDO_PARAM_ZVAL ) { add_assoc_long( return_value, "pdo_type", pdo_type ); } diff --git a/source/shared/msodbcsql.h b/source/shared/msodbcsql.h index f0b9ab5c..64be2515 100644 --- a/source/shared/msodbcsql.h +++ b/source/shared/msodbcsql.h @@ -78,7 +78,7 @@ #define SQL_SOPT_SS_TEXTPTR_LOGGING (SQL_SOPT_SS_BASE+0) // Text pointer logging #define SQL_SOPT_SS_NOBROWSETABLE (SQL_SOPT_SS_BASE+3) // Set NOBROWSETABLE option #define SQL_SOPT_SS_PARAM_FOCUS (SQL_SOPT_SS_BASE+11)// Direct subsequent calls to parameter related methods to set properties on constituent columns/parameters of container types -#define SQL_SOPT_SS_NAME_SCOPE (SQL_SOPT_SS_BASE+12)// Sets name scope for subsequent catalog function calls +#define SQL_SOPT_SS_NAME_SCOPE (SQL_SOPT_SS_BASE+12)// Sets name scope for subsequent catalog function calls #define SQL_SOPT_SS_COLUMN_ENCRYPTION (SQL_SOPT_SS_BASE+13)// Sets the column encryption mode // Define old names #define SQL_TEXTPTR_LOGGING SQL_SOPT_SS_TEXTPTR_LOGGING @@ -182,10 +182,10 @@ #define SQL_COLUMN_ENCRYPTION_DEFAULT SQL_COLUMN_ENCRYPTION_DISABLE // Defines for use with SQL_COPT_SS_CEKCACHETTL #define SQL_CEKCACHETTL_DEFAULT 7200L // TTL value in seconds (2 hours) -//SQL_SOPT_SS_NAME_SCOPE -#define SQL_SS_NAME_SCOPE_TABLE 0L -#define SQL_SS_NAME_SCOPE_TABLE_TYPE 1L -#define SQL_SS_NAME_SCOPE_DEFAULT SQL_SS_NAME_SCOPE_TABLE +//SQL_SOPT_SS_NAME_SCOPE +#define SQL_SS_NAME_SCOPE_TABLE 0L +#define SQL_SS_NAME_SCOPE_TABLE_TYPE 1L +#define SQL_SS_NAME_SCOPE_DEFAULT SQL_SS_NAME_SCOPE_TABLE // SQL_COPT_SS_ENCRYPT #define SQL_EN_OFF 0L #define SQL_EN_ON 1L