메뉴 건너뛰기

Free 버전인 Visual Studio 2008 Express Editon 으로 테스트를 해보던중..
MSSql 2005 Express 버젼이 설치되어 있어서 PHP와 연동을 시키려고 해보았다.
연동의 목표는 sql 인증을 통해 php_mssql.dll 을 이용하는 것이었다.
php_mssql.dll 모듈을 이용하면 mysql 함수(mysql_connect mysql_query ....) 와
함수명 및 사용방법이 거의 동일하기에 편할것 같았다.

설치환경
XP, Apache 2.2.x, PHP : 5.2.4, MSSQL 2005 Express

그러기 위해서는 관리툴을 설치(SQL Server Management Studio Express SP2)하여 MSSQL 설정을 ㅤㅁㅏㅊ춰주자
프로그램 => Microsoft SQL Server 2005 => SQL Server Management Studio Express 실행
기본적으로 윈도우 인증만 되어 있으므로 로그인한다음 왼쪽의
컴퓨터명\SQLEXPRESS 에서 오른쪽 마우스를 클릭후 속성을 클릭 하자.
창이 하나 뜨며 왼쪽의 보안을 클릭하면 오른쪽 화면의 SQL 서버 및 윈도우 인증을 선택하고 확인

비밀번호 설정을 위해
컴퓨터명\SQLEXPRESS => 보안 => 로그인 => sa 를 선택한다음 속성을 보면 비밀번호를
변경할수 있다.

또 하나 더 MSSql2005 Express 는 기본적으로 로컬접속만 가능하게 되어있다. 이부분을 변경해주자.
프로그램 => Microsoft SQL Server 2005 => 구성 도구 => SQL Server 노출 영역 구성 실행
서비스 및 연결에 대한 노출 영역 구성 클릭 => 원격연결 선택 => 로컬및 원격 연결 체크
=> TCP/IP 및 망명된 파이프 모두 사용 선택후
MSSQL 재시작

그리고 php.ini 에서 mssql 이 나오는지 체크해보았다. 다행이 설치되어 있었다.
그런데 mssql_connect 함수를 이용하여 접속하였음에도 접속할수 없다는 메세지만 출력되었다.
한참을 인터넷을 검색한 결과 PHP 모듈중 MS SQL Client Library 인 ntwdblib.dll(보통 php 설치디렉토리에 있다) 화일의 버젼이 낮으면 문제가 있어서 그럴수 있다고 하여..
http://www.dlldll.com/ 에서 업버젼을 다운로드 받아 설치하였다.
그러나 이전과 똑같이 mssql_connect 함수 이용시 접속오류가 발생하였다.

혹시나 MSSQL 셋팅에 오류가 있는지 확인차 관리툴인 SQL Server Management Studio Express 을
sql sever 인증방식으로 선택한후에 sa 계정으로 로그인하였다. 잘되었다.

이걸 통해 알게 되었다. php_mssql.dll 은 2005 와 연동이 잘 안된다는것을...
또는 내가 모르는 다른 방법이 있는지...

결국 다른 방법(odbc 등의)으로 연동해야 하는가? 라는 의구심을 가졌고 찾아보니..
SQL Server 2005 Driver for PHP Community Technology Preview (February 2008)
이라는걸 찾게 되었다.
다운로드 한후에 압축을 풀고 php_sqlsrv.dll 와 php_sqlsrv_ts.dll 를 php 설치디렉토리의 확장모듈
디렉토리에 넣어준다. php.ini 화일에 extension=php_sqlsrv.dll 을 추가한후
아파치를 재시작한후에 phpinfo 함수를 출력해 sqlsrv 라는 항목이 있는지 확인해보자.
혹시 아파치로그에 

PHP Warning:  PHP Startup: Unable to load dynamic library 'C:/Program Files/PHP/ext\\php_sqlsrv.dll' - \xc1\xf6\xc1\xa4\xb5\xc8 \xb8\xf0\xb5\xe2\xc0\xbb \xc3\xa3\xc0\xbb \xbc\xf6 \xbe\xf8\xbd\xc0\xb4\xcf\xb4\xd9.\r\n in Unknown on line 0

이와같은 로그가 남는다면 php_sqlsrv_ts.dll 을 php_sqlsrv.dll 로 교체해보길 바란다.
이제 실제 접속이 정상적으로 이루어지는지 확인하자 아래와 같이 샘플코드를 작성해 보자.
이 예제는 PHP_SQLSRV.chm 이라는 윈도우 도움말화일에 기록된 내용이다.

<?php
header("Content-Type: text/html; charset=euc-kr");
$serverName = "(local)";
$connectionInfo = array( "UID"=>"sa","PWD"=>"sa계정의 비밀번호","Database"=>"");

if( !( $conn = sqlsrv_connect( $serverName, $connectionInfo))) {
     echo "Unable to connect.</br>";
     die( print_r( sqlsrv_errors(), true));
}

$tsql = "SELECT CONVERT(varchar(32), SUSER_SNAME())";
if( !( $stmt = sqlsrv_query( $conn, $tsql))) {
     echo "Error in executing query.</br>";
     die( print_r( sqlsrv_errors(), true));
}

$row = sqlsrv_fetch_array($stmt);
echo "User login: ".$row[1]."</br>";

sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>

sa 가 출력되는가? 그렇다면 연동이 제대로 된것이다.
각 함수와 예제는 PHP_SQLSRV.chm 에 상세하게 나와있으니 테스트 해보길 바란다.
물론 이함수는 Mysql을 주로 사용하는 사람들이 보기에는 php_mssql.dll 이 제공하는 함수들에 비해
직관성이 떨어지기 때문에 짜증이 날지 모르지만 어쩔수 없이 mssql 2005를 사용해야 하는 경우
도움이 될듯 하다.

출처 :http://www.phpschool.com/link/tipntech/60180