PHP에서 mssql 사용하기 ///그누보드 외부 mssql 사용 //리눅스서버에서 mssql 사용하기//Freetds 정보
PHP에서 mssql 사용하기 ///그누보드 외부 mssql 사용 //리눅스서버에서 mssql 사용하기//Freetds관련링크
첨부파일
본문
PHP에서 mssql 사용하기 ///그누보드 외부 mssql 사용 // 리눅스서버에서 mssql 사용하기 // Freetds
안녕하세요 개발자 korean leo 입니다.
제가 마주친 mssql 외부 db 연결 해결 과정에 대해서 써보겠습니다.
(코드 파일에 담아 놓았습니다.)
작업을하다가 외부 데이터 베이스를 연결해달서 데이터 정보를 연결해달라는 주문을 받게되었다.
굉장히 난감했지만 db연결이 거기서 거기겠거니 하면서 시도하였다. (굉장히 큰 착각이였음..)
첫번째 : 내가 사용하는 서버는 리눅스 서버인데 연결해달라는 db는 mssql....
mssql이라함은 Micro Soft가 만들었기 때문에 winsdows에서 사용이가능한 db이다. 원래는 리눅스 서버에서 사용이 불가능 했었다.
해결 :Freetds의 사용, Freetds는 리눅스 서버에서 사용불가능한 mssql을 사용하게 연동해주는 역할을 합니다.
freetds 참고 사이트 : https://xinet.kr/?p=1060
두번째:나에게 주어진 서버는 호스팅 서버였다. free tds 사용을 하기 위해서는 ini 파일에 접근을 해서 하는데 보통 호스팅사에서는 접근을 막아놓는다. phpinfo 에서
이 기능을 사용할 수 있어야한다.
해결 : 개인서버일 경우 첫번째의 참고 사이트를 따라서 하고 호스팅 서버인 경우 가비아 호스팅사가 기본적으로 제공을 해준다 (닷홈은 안해주는 걸로 알고있음, 저같은 경우에는 가비아사에서 진행했습니다);
호스팅사에 전화를 하셔서 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/ 입니다.
개인사이트에 포스팅 해놓았습니다 . http://koreanleo.com/bbs/board.php?bo_table=php&wr_id=7
1
댓글 2개
그래서 그런지 굉장히 올드하죠 ㅋㅋ