본문으로 바로가기

PHP 7.4 - MSSQL 연동 sqlsrv

category 코딩/PHP 2022. 12. 14. 13:03

본문은 Linux 환경에 구성하는 방법이다.

Windows 환경에서 sqlsrv를 구성, php 코드로 mssql 서버에 접속하는 내용은 여기에서 다뤘다.

 

구성 환경

  • Ubuntu 20.04 LTS 64bit
  • Apache 2.4
  • PHP 7.4
  • MariaDB 10.3

 


 

아래 명령어를 그대로 따라하되, 20.04/prod.list 이 부분에 각자의 ubuntu 버전을 기입하도록 하자.

MSSQL ODBC 버전은 2022-12-14 현재 18.1.2.1 가 GA(general availability)라고 하니 고민 없이 18로 지정하자.

 

$ curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
$ curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
$ apt-get update
$ ACCEPT_EULA=Y apt-get install -y msodbcsql18 mssql-tools18 unixodbc-dev
$ apt install unixodbc-dev
$ apt install php-pear
$ pecl install sqlsrv
$ pecl install pdo_sqlsrv

 

이제 php.ini 파일에 extension 을 아래와 같이 추가한다.

extension 추가 방법은 php설치경로/mods-available/ 폴더에 ini 파일을 만드는 방법도 있다. 본인의 선택.

 

extension=sqlsrv.so
extension=pdo_sqlsrv.so

 

이제 아파치를 재시작하고 테스트 코드를 실행해 볼 차례이다.

 

<?
$conn_info = array("Database" => MSSQL_DB,
                        "UID" => MSSQL_USER,
                        "PWD" => MSSQL_PASSWORD,
                        "CharacterSet" => "UTF-8",
                        "Encrypt" => false, // SSL 통신 off
                        "TrustServerCertificate" => false // SSL 통신 off
                    );

$conn = sqlsrv_connect(MSSQL_HOST, $conn_info) or die( print_r( sqlsrv_errors(), true));

$query = "SELECT TOP 10 * FROM user";
$result = sqlsrv_query($conn, $query);

while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) {
    print_r($row);
}
?>

 

코드에서 주석 처리한 SSL 통신 off 설정을 빼 먹는다면 아래 오류가 발생할 수 있다.

이는 공인 인증서, 하다 못해 사설 인증서라도 서버와 아파치에 적용되어 SSL 통신이 가능해야 함을 의미한다.

내부 개발 또는 테스트가 목적이라면 그냥 off 시키는게 편하다.

 

Error Message

error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:self signed certificate

 

오류 메시지 처리

 

Error Message

sh: 1: phpize: not found
ERROR: `phpize' failed

 

phpize 가 없어서 발생. 간단히 apt install php-dev 하면 해결 된다.

 

 

Error Message

/tmp/pear/temp/sqlsrv/shared/xplat.h:30:10: fatal error: sql.h: No such file or directory

 

순서대로 따라했다면 발생하지 않았겠지만, apt install unixodbc-dev 이걸 안하면 발생한다.

 

 

 

'코딩 > PHP' 카테고리의 다른 글

PHP - date 함수 인자 정리 (Y-m-d 등)  (0) 2023.01.30
자주 쓰는 것들  (1) 2023.01.19
[PHP] 초성/자음 추출 함수  (1) 2022.10.04
VScode Extension - PHP IntelliSense 설정  (1) 2022.09.22
PHP - sqlsrv 함수 사용 시 주의 사항  (0) 2022.08.09