diff --git a/ibm_driver.c b/ibm_driver.c index c4d0fc6..74a9cc7 100644 --- a/ibm_driver.c +++ b/ibm_driver.c @@ -1088,6 +1088,8 @@ static int dbh_connect(pdo_dbh_t *dbh, zval *driver_options) rc = SQLSetEnvAttr((SQLHENV)conn_res->henv, SQL_ATTR_UTF8, (SQLPOINTER)(intptr_t)SQL_TRUE, 0); } #endif /* PASE */ + /* forced fixed length strings to be returned */ + rc = SQLSetEnvAttr((SQLHENV)conn_res->henv, SQL_ATTR_OUTPUT_NTS, (SQLPOINTER)(intptr_t)SQL_FALSE, SQL_IS_INTEGER); /* now an actual connection handle */ rc = SQLAllocHandle(SQL_HANDLE_DBC, conn_res->henv, &(conn_res->hdbc)); diff --git a/ibm_statement.c b/ibm_statement.c index 21dbf40..93f9872 100644 --- a/ibm_statement.c +++ b/ibm_statement.c @@ -1906,10 +1906,12 @@ int record_last_insert_id( pdo_stmt_t * stmt, pdo_dbh_t *dbh, SQLHANDLE hstmt) long int returnValue; conn_handle *conn_res = (conn_handle *) dbh->driver_data; char id[ MAX_IDENTITY_DIGITS ] = ""; - char server[MAX_DBMS_IDENTIFIER_NAME]; + char server[MAX_DBMS_IDENTIFIER_NAME + 1]; + SQLSMALLINT server_name_length = 0; - rc = SQLGetInfo(conn_res->hdbc, SQL_DBMS_NAME, (SQLPOINTER)server, MAX_DBMS_IDENTIFIER_NAME, NULL); + rc = SQLGetInfo(conn_res->hdbc, SQL_DBMS_NAME, (SQLPOINTER)server, MAX_DBMS_IDENTIFIER_NAME, &server_name_length); check_dbh_error(rc, "SQLGetInfo"); + server[server_name_length] = '\0'; if( strncmp( server, "IDS", 3 ) == 0 ) { rc = SQLGetStmtAttr( (SQLHSTMT)hstmt, SQL_ATTR_GET_GENERATED_VALUE, (SQLPOINTER)id, MAX_IDENTITY_DIGITS, NULL );