커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
*
HanIRC의 #coffeenix 방
[
장비 및 회선 후원
]
> Forum <
IT 일정
N
e
w
!
자동화 프로젝트
HOME
>
프로그래밍 / 개발
>
웹 프로그래밍 / PHP
도움말
검색 :
사이트
WHOIS
웹서버 종류
php에서 MSSQL 사용
작성일 : 2005/12/28 00:22
글쓴이 : 좋은진호 (
http://coffeenix.net/
)
조회수 : 34404
[
이전화면
/
수정
] 비밀번호 :
제 목 : 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를 기준으로 설명한다.
# cd /usr/ports/databases/php5-mssql 또는 /usr/ports/databases/php4-mssql
# make
# make install
/usr/local/etc/php/extensions.ini 에 extension=mssql.so 이 추가되어 있을 것이고, apache 재실행으로 웹페이지(php)에서 사용할 수 있다.
2. FreeTDS 와 php 모듈 설치 (Linux 에서)
FreeTDS(
http://www.freetds.org/
) 에서 최신 FreeTDS를 받는다. ( freetds-stable.tgz )
# tar xvfz freetds-stable.tgz
# cd freetds-0.64/
# ./configure --prefix=/usr/local/freetds
# make
# make install
1) php를 새로 설치할 경우
php configure할 때 --with-mssql=/usr/local/freetds 옵션만 추가하고 컴파일하면 된다.
2) 기존에 설치된 php는 그대로 두고, mssql 모듈만 추가할 경우
php 소스를 먼저 푼 후 다음과 같은 과정으로 진행한다. 이 때 phpize와 php-config 명령은 PATH 에 잡혀있어야 한다. make install시 화면에 표시된 디렉토리에 mssql.so 모듈이 설치된다.
# cd php-5.x.x
# cd ext/mssql/
# phpize
# ./configure --with-mssql=/usr/local/freetds
# make
# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
만약 PDO모듈(PHP Data Objects, pdo_dblib.so) 까지 필요하다면 ext/pdo_dblib/ 디렉토리 에서 ./configure --with-pdo-dblib=/usr/local/freetds 명령으로 한 후 설치하면 된다.
모듈로 설치한 경우 php.ini 에 다음을 추가한다.
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension=mssql.so
extension=pdo_dblib.so <-- pdo_dblib.so 모듈을 설치한 경우
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에 위치한다.
[global]
dump file = /var/tmp/freetds.log
client charset = EUC-KR
text size = 64512
[Coffeenix]
host = IP 또는 호스트명
port = 1433
tds version = 7.0
[TestDB]
host = IP 또는 호스트명
port = 1433
tds version = 8.0
[Coffeenix]와 [TestDB] 2개는 MSSQL 서버를 정의한 것이고, [global]은 공통으로 적용되는 설정이다. dump file = 는 tds dump내용을 저장할 파일 경로로 처리과정에 대한 상세한 정보를 얻고 싶다면 설정한다. client charset = 는 client의 문자셋을 지정한다. MSSQL 7.0이상에서는 UCS-2 문자셋을 사용해서 통신을 하며 client charset = EUC-KR로 지정해야 사용에 문제가 없다.
freetds.log 을 보면 다음과 같이 문자셋이 변환되는 것을 확인할 수 있다.
16:43:03.512658 names for ISO-8859-1: ISO-8859-1
16:43:03.512687 names for UTF-8: UTF-8
16:43:03.512709 names for UCS-2LE: UCS-2LE
16:43:03.512730 names for UCS-2BE: UCS-2BE
16:43:03.512780 iconv to convert client-side data to the "EUC-KR" character set
16:43:03.512834 tds_iconv_info_init: converting "EUC-KR"->"UCS-2LE"
16:43:03.512871 tds_iconv_info_init: converting "ISO-8859-1"->"UCS-2LE"
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' 형식의 값을 사용한다.
< ?
$szDBHost = "Coffeenix";
$szDBName = "DB명";
$szDBUser = "DB ID";
$szDBPass = "DB 비밀번호";
if(!$db_connect = mssql_connect($szDBHost,$szDBUser,$szDBPass)) exit;
if(!mssql_select_db($szDBName,$db_connect)) exit;
$result = mssql_query("SQL문", $db_connect);
if( $result ) {
echo "query OK";
} else {
echo "query error";
}
? >
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/
커피닉스 카페 최근 글
[06/16]
[질문]SAN 스위치 브로드케이드 dcx8510-4 장비관련입니다.
[04/22]
Re: 영화속에 컴퓨터 이야기 ~스워드피쉬(2001)
[10/20]
Cross Compiler 깔
[07/14]
SSL АО
[04/26]
Re: 도스화면 원격조종 여부
[04/25]
도스화면 원격조종 여부
[10/30]
Cshell에서 난수 설정
[10/23]
공항철도주식회사 SE 구인 件
[01/26]
Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
[01/25]
wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
[01/11]
특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
[08/01]
DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
[05/16]
(주)후이즈 시스템엔지니어 (경력자) 모집
[02/15]
[AWS] Cloudfront edge 확인하기
[01/20]
Mobile Service/eCommerce 기업에서 Server / Java / PHP 개발자 구인
N
e
w
! 최근에 등록한 페이지
KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
오픈캐스케이드 캐드 (OpenCASCADE CAD)
QCad for Windows --- GNU GPL (Free Software)
The Hello World Collection
IPMI를 활용한 리눅스 서버관리
DNS 설정 검사
nagiosgraph 설치 방법
Slony-I 설치 방법 (postgresql replication tool)
Qmail기반의 Anti spam 시스템 구축하기
clusterssh
[ 함께하는 사이트 ]
운영진 :
좋은진호(truefeel)
, 야수(yasu), 범냉이, sCag
2003년 8월 4일~