PHP MSSQL 및 SQLSRV 함수 대응 관계 비교
페이지 정보

본문
PHP MSSQL 및 SQLSRV 함수 대응 관계 비교
Q.
Q.
PHP 5.3 이상 환경에서 기존 mssql 확장 지원 중단에 따른 sqlsrv 함수로의 전환 방법과 주요 대응 관계를 파악하여 그누보드 기능 적용 및 오류를 해결하는 데 도움을 줍니다.
기존 MSSQL 함수를 SQLSRV 함수로 전환하기
PHP 5.3 이상 환경에서 기존 mssql_* 함수들은 지원이 중단되었으므로, 최신 sqlsrv_* 함수로 코드를 수정해야 합니다. 주요 함수별 대응 관계는 다음과 같습니다.
주요 함수 대응표
- 데이터베이스 연결:
mssql_connect및mssql_pconnect는sqlsrv_connect로 변경합니다. 단,sqlsrv_connect는 기본적으로 연결 풀링을 시도합니다. - 연결 종료:
mssql_close는sqlsrv_close와 대응되며, 호출 시 연결이 풀(Pool)로 반환됩니다. - 쿼리 실행:
mssql_query는sqlsrv_query와 기능이 동일합니다. - 저장 프로시저 실행:
mssql_execute및mssql_init,mssql_bind는 전용 함수가 없으며sqlsrv_query를 사용하여 실행 및 매개변수를 처리합니다. - 결과 행 가져오기:
mssql_fetch_array는sqlsrv_fetch_array와 기능이 동일합니다.mssql_fetch_assoc는sqlsrv_fetch_array호출 시SQLSRV_FETCH_ASSOC상수를 사용하여 연관 배열로 가져올 수 있습니다.mssql_fetch_row는sqlsrv_fetch_array호출 시SQLSRV_FETCH_NUMERIC상수를 사용하여 숫자 인덱스 배열로 가져올 수 있습니다.mssql_fetch_object는sqlsrv_fetch_object와 기능이 동일합니다.
- 데이터 및 필드 정보 조회:
mssql_num_rows,mssql_num_fields,mssql_rows_affected는 각각sqlsrv_num_rows,sqlsrv_num_fields,sqlsrv_rows_affected와 기능이 동일합니다.mssql_fetch_field,mssql_field_name,mssql_field_type등은sqlsrv_field_metadata를 통해 필드 메타데이터를 조회할 수 있습니다.mssql_result는sqlsrv_fetch와sqlsrv_get_field를 조합하여 현재 행의 필드 데이터를 읽는 방식으로 대응합니다.
- 오류 및 결과 리소스 해제:
mssql_get_last_message는 오류 정보(코드 및 메시지)를 배열로 반환하는sqlsrv_errors를 사용합니다.mssql_free_result는sqlsrv_cancel과 기능이 동일합니다.mssql_free_statement는sqlsrv_free_stmt로 변경합니다.
지원되지 않는 함수 및 대체 방법
mssql_select_db: SQLSRV API에는 데이터베이스를 직접 변경하는 전용 함수가 없습니다.sqlsrv_connect의 연결 옵션 배열에 대상 데이터베이스를 지정하거나, 연결 후sqlsrv_query($conn, "USE databaseName")쿼리를 실행해야 합니다.mssql_fetch_batch,mssql_field_length,mssql_field_seek,mssql_guid_string,mssql_min_error_severity,mssql_min_message_severity: 직접 대응되는 함수는 지원되지 않으며, 서버 측CONVERT함수 활용이나sqlsrv_num_rows,sqlsrv_field_metadata등 다른 함수와 조합하여 대체 로직을 구현해야 합니다.
mssqlconnect 대신 sqlsrvconnect 사용 방법
PHP 5.3 이상 환경에서 기존에 사용하던 mssql_connect 함수 대신 sqlsrv_connect 함수를 사용해야 합니다.
함수 구문 및 기본 특징
- 구문:
sqlsrv_connect(string $serverName, array $connectionInfo =?): resource형태를 가집니다. - 인증 방식: 기본적으로 Windows 인증을 사용하여 연결을 시도합니다. SQL Server 인증을 사용하려면 연결 옵션 배열(
$connectionInfo)에UID와PWD키를 포함해야 합니다. - 연결 풀링(Connection Pooling): 기본적으로
sqlsrv_connect함수는 성능 향상을 위해 사용 가능한 경우 풀링된 연결을 열려고 시도합니다. 스크립트가 종료되거나sqlsrv_close가 호출되면 연결은 연결 풀로 반환됩니다. 매 호출마다 강제로 새로운 연결을 생성하게 하려면$connectionInfo배열에"ConnectionPooling"옵션을0(또는false)으로 설정하면 됩니다. - 데이터베이스 선택: SQLSRV 드라이버는 데이터베이스를 변경하는 전용 함수가 없으므로 대상 데이터베이스는
sqlsrv_connect에 전달하는$connectionInfo배열 안의"Database"옵션에 지정해야 합니다.
코드 적용 예시
<?php
$serverName = "servername";
$connectionInfo = array("Database"=>"test", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
echo "Could not connect.\n";
die(print_r(sqlsrv_errors(), true));
}
?>
지원되지 않는 MSSQL 함수 처리 방법
PHP 5.3 이상 환경에서 mssql_* 함수가 지원 중단됨에 따라, sqlsrv_* 드라이버로 전환 시 일부 함수는 직접적인 대응 함수가 존재하지 않습니다. 이 경우 다음과 같이 대체 로직을 구현해야 합니다.
주요 미지원 함수 및 대체 방안
mssql_select_db: SQLSRV API에는 데이터베이스를 변경하는 전용 함수가 없습니다.- 연결 시 설정:
sqlsrv_connect호출 시 전달하는$connectionOptions배열에'Database' => 'dbName'키를 지정하여 초기 데이터베이스를 설정합니다. - 연결 후 변경: 이미 열려 있는 연결에서 데이터베이스를 변경해야 할 경우,
sqlsrv_query($conn, "USE dbName")쿼리를 실행하여 처리합니다.
- 연결 시 설정:
mssql_init/mssql_execute/mssql_bind: 스토어드 프로시저를 위한 별도의 초기화 함수가 없으므로,sqlsrv_query를 사용하여 직접 실행합니다.mssql_fetch_batch: 직접 대응하는 함수는 없으나,sqlsrv_num_rows를 통해 결과 집합의 행 수를 확인하며 데이터를 처리할 수 있습니다.mssql_field_seek: 무작위 필드 접근을 지원하지 않으므로,sqlsrv_get_field를 사용하여 필드를 순서대로 읽어야 합니다.
이 외에도 GUID 변환 등 일부 기능은 서버 측의 CONVERT 함수를 활용하거나 드라이버의 표준 쿼리 실행 방식을 따라야 합니다.
상황별 판단 및 대응 가이드
- 상황: PHP 5.3 이상 환경에서 기존
mssql_*함수 기반 코드를 최신sqlsrv_*드라이버로 전환해야 하는 경우 - 선택 기준:
- 1:1 대응이 가능한 함수(
sqlsrv_query,sqlsrv_fetch_array등)는 즉시 교체합니다. - 직접 대응되지 않는 함수(
mssql_select_db,mssql_init등)는 연결 설정 옵션이나USE쿼리 등 대체 로직을 적용해야 합니다.
- 1:1 대응이 가능한 함수(
- 다음 행동:
sqlsrv_connect로 연결을 구성합니다(연결 옵션에 'Database' 지정 권장).sqlsrv_query를 사용하여 쿼리 및 저장 프로시저를 실행합니다.- DB 연결 및 쿼리 실행 결과를 테스트합니다.
실전 FAQ
Q. mssql_select_db 함수를 대체하려면 어떻게 해야 하나요?
- 대안: SQLSRV API에는 데이터베이스를 직접 변경하는 전용 함수가 없습니다.
sqlsrv_connect호출 시 연결 옵션 배열($connectionOptions)에'Database' => 'dbName'키를 지정하여 초기 데이터베이스를 설정하거나, 연결 후sqlsrv_query($conn, "USE dbName")쿼리를 실행하여 대체하십시오.
Q. sqlsrv_connect 연결 시 에러가 발생하면 어떻게 확인하나요?
- 예외:
sqlsrv_connect가false를 반환할 경우,sqlsrv_errors()함수를 호출하여 상세한 오류 코드와 메시지를 배열 형태로 확인하여 디버깅하십시오.
참고자료
기타 참고자료
- learn.microsoft.com — 연결 풀링(Microsoft Drivers for PHP for SQL Server) - PHP drivers for SQL Server | Microsof…
- php.net — PHP: sqlsrv_connect - Manual
- learn.microsoft.com — How to: Retrieve Output Parameters Using the SQLSRV Driver - PHP drivers for SQL Server…
- learn.microsoft.com — 방법: SQLSRV 드라이버를 사용하여 I/O 매개 변수 검색 - PHP drivers for SQL Server | Microsoft Learn
- 이전글PHP 5.3 이상 환경에서 MSSQL 연동 드라이버 변경 및 설정 방법 26.09.28
- 다음글PHP 문자열 내 큰따옴표를 작은따옴표로 치환할 때 발생하는 문법 오류 해결 26.09.27
댓글목록
등록된 댓글이 없습니다.