| php에서 MSSQL 사용 | 작성일 : 2005/12/28 00:22 |
| 조회수 : 34405 |
|
제 목 : php에서 MSSQL 사용 작성자 : 좋은진호(truefeel, http://coffeenix.net/ ) 작성일 : 2005.12.27(화) 수정일 : 2007.07.23(월) Linux에서 설치 추가 Unix/Linux에서 FreeTDS 라이브러리를 사용해서 MS SQL과 Sybase DB를 핸들링할 수 있다. FreeTDS는 MSSQL에서 사용하는 TDS(Tabular Data Stream) 프로토콜의 오픈 소스 버전이라고 보면된다. 현재 TDS 4.2(System 10이전 Sybase, MS SQL 6.x), 5.0(Sybase), 7.0, 8.0(MS SQL 2000에 해당) 버전을 지원한다. 1. FreeTDS 설치 (FreeBSD 에서) MS SQL을 사용하기 위한 Unix/Linux 라이브러리 FreeTDS( http://www.freetds.org/ )의 php 모듈 설치는 FreeBSD를 기준으로 설명한다.
/usr/local/etc/php/extensions.ini 에 extension=mssql.so 이 추가되어 있을 것이고, apache 재실행으로 웹페이지(php)에서 사용할 수 있다. 2. FreeTDS 와 php 모듈 설치 (Linux 에서) FreeTDS( http://www.freetds.org/ ) 에서 최신 FreeTDS를 받는다. ( freetds-stable.tgz )
1) php를 새로 설치할 경우 php configure할 때 --with-mssql=/usr/local/freetds 옵션만 추가하고 컴파일하면 된다. 2) 기존에 설치된 php는 그대로 두고, mssql 모듈만 추가할 경우 php 소스를 먼저 푼 후 다음과 같은 과정으로 진행한다. 이 때 phpize와 php-config 명령은 PATH 에 잡혀있어야 한다. make install시 화면에 표시된 디렉토리에 mssql.so 모듈이 설치된다.
만약 PDO모듈(PHP Data Objects, pdo_dblib.so) 까지 필요하다면 ext/pdo_dblib/ 디렉토리 에서 ./configure --with-pdo-dblib=/usr/local/freetds 명령으로 한 후 설치하면 된다. 모듈로 설치한 경우 php.ini 에 다음을 추가한다.
3. freetds.conf 설정 FreeTDS에서는 freetds.conf 파일에 환경설정을 한다. 파일 형식은 Samba의 smb.conf나 rsyncd의 rsyncd.conf와 비슷한 형태이며, 접속할 MSSQL Server와 log 파일 경로, 문자셋, connection timeout 시간 등을 설정한다. FreeBSD ports 시스템으로 설치시 /usr/local/etc/freetds.conf 에, Linux에서 2번 과정으로 설치했다면 /usr/local/freetds/etc/freetds.conf에 위치한다.
[Coffeenix]와 [TestDB] 2개는 MSSQL 서버를 정의한 것이고, [global]은 공통으로 적용되는 설정이다. dump file = 는 tds dump내용을 저장할 파일 경로로 처리과정에 대한 상세한 정보를 얻고 싶다면 설정한다. client charset = 는 client의 문자셋을 지정한다. MSSQL 7.0이상에서는 UCS-2 문자셋을 사용해서 통신을 하며 client charset = EUC-KR로 지정해야 사용에 문제가 없다. freetds.log 을 보면 다음과 같이 문자셋이 변환되는 것을 확인할 수 있다.
host =, port = 는 MSSQL 서버와 포트를 지정하면 되며 기본 포트는 1433번이다. tds version = 은 SQL서버의 버전을 지정한다. text size = 는 TEXTSIZE의 값(bytes단위). TEXT나 image 타입일 때 return되는 값의 최대 길이를 bytes 단위로 지정한다. return되는 이미지의 크기가 크다면 이 값을 늘리면 된다. freetds.conf 수정후에 apache를 restart할 필요는 없다. 4. php 사용 예 $szDBHost에는 freetds.conf에서 지정한 서버명이나 'IP:1433' 형식의 값을 사용한다.
5. 에러 메시지 1) Warning: mssql_connect(): Unable to connect to server: 111.222.123.123 in ... mssql_connect() 함수에서 server지정할 때 freetds.conf에 지정한 서버명이나 'IP:포트' 형태로 사용해야 한다. 위의 에러는 freetds.conf에서 [111.222.123.123] 서버 섹션이 있는지 찾아봤다는 의미가 된다. 도메인이나 IP를 사용시에는 포트를 지정해야함을 잊지 말자. 2) Warning: mssql_connect(): WARNING! Some character(s) could not be converted into client's character set. Unconverted bytes were changed to question marks ('?'). (severity 16) in .. 문자셋이 맞지 않아서 발생한 것이다. freetds.conf에 client charset 을 설정한다. 3) Warning: mssql_connect(): message: 'ID' 사용자가 로그인하지 못했습니다. (severity 14) in ... 또는 Warning: mssql_connect(): message: Login failed for user 'ID'. (severity 14) in ... ID나 비밀번호가 틀렸음을 의미한다. 6. 참고(할만한) 사이트 * mssql_connect PHP Manual http://www.php.net/manual/kr/function.mssql-connect.php * FreeTDS 홈페이지 http://www.freetds.org/ * FreeTDS FAQ (한글 번역, 예전 내용) http://database.sarang.net/database/freetds/faq/faq.html * Code: FreeTDS Notes http://rasterweb.net/raster/code/freetdsnotes.html * The FreeTDS mailing Archives http://lists.ibiblio.org/pipermail/freetds/ |
||||||||||||||||||||||
|
|