출처 : http://blog.daum.net/duf2wjs/22


원래 FreeTDS는 리눅스나 Unix 시스템에서 MSSQL과의 접속을 위해 주로 사용되는 라이브러리였는데

웃기게도 윈도우시스템에서 PHP로 MSSQL을 연동해야하는 즐거운(?) 상황이 발생했다.

 

 

중략하고.. 해법은 이러하다. 함정이 많음을 주의하자.

 

 

1) FreeTDS for Windows 다운로드 한후 설치한다. 설정파일은  C:\FreeTDS\etc\freetds.conf 파일이다.

 

이 파일을 열어서 다음과 같이 수정한 후 저장한다. IP나 포트등은 자기의 환경에 맞도록 설정한다.

그러나.. PHP에서는 이 설정파일을 사용하지 않는다. 그냥 콘솔 테스트용으로 해본다고 생각하면된다.

아래 설정중 붉은 부분을 주의깊게 보자. 뒤에 뭔말인지 나온다.

 

[global]
        tds version = 8.0
;       initial block size = 512
;       swap broken dates = no
;       swap broken money = no
;       dump file = /tmp/freetds.log
;       debug flags = 0xffff
;       timeout = 10
;       connect timeout = 10
        text size = 64512
        client charset = CP949     ; 어떤 시스템은 이 설정내용을 인식하지 못한다. 못하면 빼버린다.

                                          ; 빼버리면 한글이 깨지는 경우가 생긴다. 한글이 깨지면 tds version=4.2로 하자

 

[dbserver]
       host = MSSQL_IP
       port = MSSQL_PORT
       tds version = 8.0

 

 

2) FreeTDS로 정상적으로 접속이 되는지 커맨드창에서 확인한다.

   C:\FreeTDS\tsql -H MSSQL_IP -p MSSQL_PORT -U DB아이디 -P DB비밀번호

   1> SELECT * FROM mm

   2> go

 

 

3) 정상적으로 접속되면 이 설정파일을 c:\freetds.conf 로 복사한다.  (이유는 6번 때문이다)

    만약 설치를 C: 드라이브가 아닌 D:드라이브나 다른 드라이브에 했더라도 PHP에서는

    설정을 무조건 C:\freetds.conf 파일의 내용만을 참조한다. 이것 때문에 다들 겁나 해메나보다.

    배포사이트에는 PHP가 있는 드라이브의 최상위에 넣으라고 하는데 뻥인가보다.

 

 

4) 아파치와 PHP를 설치하고 설정한다. 이것을 알아서.. 귀찮으면 그냥 APM_SETUP 이런걸로 설치해준다.

   연동설정도 알아서 잘해준다.

 

 

5) FreeTDS와 PHP를 연결해줄 모듈을 다운로드 받아서  PHP/ext 폴더안에 넣는다. 물론 압축풀어서 dll만

 

       PHP5.2.x 버전 : http://download.moodle.org/download.php/dblib/php52/DBLIB_TS.zip

       PHP5.3.x 버전 : http://download.moodle.org/download.php/dblib/php53/DBLIB_TS.zip

 

 

6) php.ini 파일을 열어서 다음과 같이 수정한다. (이 부분 때문에 간만에 삽집했다. -_-)

         ;extension=php_mssql.dll 앞의 주석을 제거하지 않는다

           (제거한다가 아니고 제거하지 않는다!)    

         extension=php_dblib.dll  라고 한줄 추가한다.
         mssql.max_procs = -1 이라고 된 부분을 찾아서 mssql.max_procs = 4096 이라고 바꿔준다.  

 

 

 

7) 아파치를 재시작한 다음에 phpinfo() 로 띄우면 반드시 Library Version 이 FreeTDS로 나와야 한다.

mssql

MSSQL Supportenabled
Active Persistent Links0
Active Links0
Library versionFreeTDS


                 (1,2,3,5,6의 과정을 제대로 안하면 이게 안나온다. 물론 MSSQL에 접속도 안된다)

 

 

8) 다음의 샘플코드로 돌려본다.

 

 

 <?php
 
   putenv("FREETDSCONF=C:\freetds.conf");  // 이 두줄은 빼도 되면 빼고 안되면 넣고.. 알아서..
    putenv("TDSVER=80");


     $link = mssql_connect('dbserver', 'DB아이디', 'DB비밀번호');
     if(!$link) {
        echo'Could not connect';
     }else{
      echo'Successful connection';

     }
     mssql_close($link);
 ?>

 

 

 

 

9) 잠자러 간다. 끝.

 

 

10) 몇몇 문제와 해결

 

****** 만약 tsql 로 커맨드 상에서는 접속이 잘되는데 php코드로는 접속이 안될때는 freetds.conf 파일을 열어본다.

어떤 시스템에서는  아래의 설정중에 붉은 부분을 해석하지 못하고 오류를 내버리는 경우가 있다. 붉은 부분은 없어도 돌아가니

냉큼 날려버리자

 

[global]
        tds version = 8.0
;       initial block size = 512
;       swap broken dates = no
;       swap broken money = no
;       dump file = /tmp/freetds.log
;       debug flags = 0xffff
;       timeout = 10
;       connect timeout = 10
        text size = 64512
        client charset = CP949

[dbserver]
       host = HOST_IP
       port = HOST_PORT
       tds version = 8.0

 

 

***** 한글이 SELECT 때는 정상적으로 나오는데 INSERT 할때 한글이 깨져서 들어간다면(시스템마다 안깨지는것도 있고 깨지는것도 있다. 기준이 뭔지는 나도 모르겠다) tds version=8.0 이 부분을 tds version = 4.2 로 바꿔본다.

 

 

 

출력용 매뉴얼 문서

-------------------------------------------------------------

 

 아파치-PHP-MSSQL연동설치.pdf

 







2015년 11월 13일 추가



MSSQL2014 일 경우에는  freetds.conf 파일의 내용중 client charset = CP949 의  CP949를 UTF-8로 설정을 해 주어야 연결이 된다.  이 부분을 그대로 두면 한글이 깨지는것이 아니라 연결 자체가 안된다.

(윈도우10 64Bit, MSSQL2014, FreeTDS-0.95rc2-x86, Apache2.4.16, PHP5.3.16)


[global]
        tds version = 8.0
;       initial block size = 512
;       swap broken dates = no
;       swap broken money = no
;       dump file = /tmp/freetds.log
;       debug flags = 0xffff
;       timeout = 10
;       connect timeout = 10
        text size = 64512
        client charset = CP949 ----> 
client charset = UTF-8

[dbserver]
       host = HOST_IP
       port = HOST_PORT
       tds version = 8.0