BOARD

자료·레퍼런스

PHP MSSQL 및 SQLSRV 함수 대응 관계 비교

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 15회 작성일 26-09-27 17:44

본문

PHP MSSQL 및 SQLSRV 함수 대응 관계 비교

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:1 대응이 가능한 함수(sqlsrv_query, sqlsrv_fetch_array 등)는 즉시 교체합니다.
    2. 직접 대응되지 않는 함수(mssql_select_db, mssql_init 등)는 연결 설정 옵션이나 USE 쿼리 등 대체 로직을 적용해야 합니다.
  • 다음 행동:
    1. sqlsrv_connect로 연결을 구성합니다(연결 옵션에 'Database' 지정 권장).
    2. sqlsrv_query를 사용하여 쿼리 및 저장 프로시저를 실행합니다.
    3. 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() 함수를 호출하여 상세한 오류 코드와 메시지를 배열 형태로 확인하여 디버깅하십시오.

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.