Programming Learning Diary

PHP에서 mssql 사용하기 ///그누보드 외부 mssql 사용 // 리눅스서버에서 mssql 사용하기 // Freetds

페이지 정보

작성일 19-11-28 17:25

본문

PHP에서 mssql 사용하기 ///그누보드 외부 mssql 사용  // 리눅스서버에서 mssql 사용하기 // Freetds 

(코드는 파일에 담아 놓았습니다.)



작업을하다가​ 외부 데이터 베이스를 연결해달서 데이터 정보를 연결해달라는 주문을 받게되었다.

굉장히 난감했지만 db연결이 거기서 거기겠거니 하면서 시도하였다. (굉장히 큰 착각이였음..)

 

첫번째 : 내가 사용하는 서버는 리눅스 서버인데  연결해달라는 db는 mssql....
mssql이라함은 Micro Soft가 만들었기 때문에 winsdows에서 사용이가능한 db이다. 원래는 리눅스 서버에서 사용이 불가능 했었다.


해결 :Freetds의 사용,  Freetds는 리눅스 서버에서 사용불가능한 mssql을 사용하게 연동해주는 역할을 합니다.

freetds 참고 사이트 : https://xinet.kr/?p=1060



두번째:나에게 주어진 서버는 호스팅 서버였다. free tds 사용을 하기 위해서는 ini 파일에 접근을 해서 하는데 보통 호스팅사에서는 접근을 막아놓는다. phpinfo 에서 
b2b73c6735ed9fef9453f84ef5448108_1574928436_7836.png
 


 

이 기능을 사용할 수 있어야한다.


해결 : 개인서버일 경우 첫번째의 참고 사이트를 따라서 하고 호스팅 서버인 경우 가비아 호스팅사가 기본적으로 제공을 해준다 (닷홈은 안해주는 걸로 알고있음, 저같은 경우에는 가비아사에서 진행했습니다);

호스팅사에 전화를 하셔서 ini파일에 접근을 시도하셔야합니다.




세번째:외부 db에 접근하기 위해서 외부서버의 서버ip와port ,username ,password,dbname을 알아야한다 .


해결:외부 db측에 user 하나 생성해달라고 요청해야합니다. 




네번째:mssql 코드를 사용할 줄 알아야한다. 코드와 설명 주의할 점을 넣겠다. 



해결

<?php
    
    // 그누보드에서 외부 mssql 연결하기 //(PHP에서 mssql 사용하기)

    //외부 db접속
     /*mssql 기본포트는 1433 이라고 합니다. 저는 이포트 입력 안해서 안들어가졌었습니다.*/ 
    $server = 'server:port'//외부 서버 ip 입력  :이후 포트입력  ex )27.0.0.1:1433 
    $username = 'username';  //username 입력 
    $password = 'password';  // password 입력
    $database = 'dbname';    //dbname 입력
    $connection = mssql_connect($server$username$password);

    //쿼리문작성 예제
    //외부 db를 연결하다보면 컬럼명을 한글로 작성하는 사람들이 종종 있습니다
    //인코딩 문제 때문에 한글 입력에 오류가 나기때문에 utf-8을 euc-kr 로 바꾸어줍니다. ICONV()함수사용

    //예제 쿼리
    $query = "SELECT ".ICONV("UTF-8","EUC-KR","한글1,").ICONV("UTF-8","EUC-KR","한글2,").ICONV("UTF-8","EUC-KR","한글3,")
    .ICONV("UTF-8","EUC-KR","한글4,").ICONV("UTF-8","EUC-KR","한글5,").ICONV("UTF-8","EUC-KR","한글6")
    ." FROM j_MPay WHERE ".ICONV("UTF-8","EUC-KR","한글7=").$member[mb_id]."and substring(".ICONV("UTF-8","EUC-KR","한글8").",1,4) = ".$year." ORDER BY ".ICONV("UTF-8","EUC-KR","한글9");
    $result = mssql_query($query);
    $numRows = mssql_num_rows($result); 

    //출력의 경우에는 반대로 한글 출력이 안될 수 도 있기때문에 EUC-KR 을 UTF-8로 바꾸어줍니다.
    while($row = mssql_fetch_array($result,0)){
        echo ICONV("EUC-KR","UTF-8",$row[1]); 
        echo ICONV("EUC-KR","UTF-8",$row[2]); 
        echo ICONV("EUC-KR","UTF-8",$row[3]); 
        echo ICONV("EUC-KR","UTF-8",$row[4]); 
        echo ICONV("EUC-KR","UTF-8",$row[5]); 
    }

    //외부 db닫아줌
    mssql_close($connection);
?>


-mssql의 기본 포트는 1433 이라고 한다. ip 옆에 : port를 꼭 입력하자 본인 같은 경우에는 port를 입력하지 않아 접속을 할 수 없었다.


-mssql_query()함수에 한글이 들어가있는 쿼리문은 접근이 안되었다.그래서 ICONV()함수를 이용하여 다른 함수에 접근했다.


-mssql_num_rows() 함수에서 결과 값을 받았을때에 한글 깨짐 현상이 발생하여 다시 ICONV()함수를 이용하여 utf-8로 인코딩 해주었다.


-불러온 순서대로 row[0],row[1],row[3] ... 순서대로 쿼리문을 불러오게된다.





필자의 경우에는 호스팅사:가비아/그누보드 솔루션 사용 하여 외부 db에 접근하였습니다. 개인 사원 정보를 가져와 사원 정보를 업데이트하는거라 따로 사진은 올릴 수 없지만
작업한 사이트는 http://qldpatl.gabia.io/ 입니다.
 

koreanleo


첨부파일

댓글목록

등록된 댓글이 없습니다.