MSSQL CentOS 7 + PHP 7 + SQL Server (MSSQL) 연결
페이지 정보
본문
1. 서버 상태 확인
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# php -v
PHP 7.0.25 (cli) (built: Oct 29 2017 13:43:03) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.25, Copyright (c) 1999-2017, by Zend Technologies
2. SQL Server 연결을 위해서는 리눅스용 드라이버가 필요합니다.
아래 사이트에서 "CentOS7.tar" 파일을 내려받는다. 현재 최신버전은 5.1.2 입니다.
https://github.com/Microsoft/msphpsql/releases
설치에 사용할 파일은 CentOS7-7.0.tar 이며, CentOS 7 + PHP 7.0 을 의미합니다.
내려받은 압축파일에는 아래와 같이 파일이 들어있으며, 필요한 파일은 "php_sqlsrv_7_nts.so" 파일입니다.
3. 파일을 서버에 업로드 합니다.
php_sqlsrv_7_nts.so 파일을 /usr/lib64/php/modules 에 복사합니다.
php_pdo_sqlsrv_7.nts.so 는 오류가 발생하므로 사용하지 않습니다.
[root@localhost ~]# cp /home/happyjung/php_sqlsrv_7_nts.so /usr/lib64/php/modules/
복사 후 권한을 설정한다.
[root@localhost ~]# chmod 755 /usr/lib64/php/modules/php_sqlsrv_7_nts.so
4. /etc/php.ini 적당한 위치에 내용 추가
[root@localhost ~]# vi /etc/php.ini
extenstion=php_sqlsrv_7_nts.so
;extenstion=php_pdo_sqlsrv_7_nts.so
5. SQL Server 연결을 위한 FreeTDS 설치
[root@localhost ~]# yum install freetds-devel libxml2-devel
6. /etc/freetds.conf
[root@localhost ~]# cp -a /etc/freetds.conf /etc/freetds.conf.original
[root@localhost ~]# vi /etc/freetds.conf 끝에 내용 추가
[MSSQL]
host = IP주소
port = 1433
tds version = 8.0 # https://www.happyjung.com/lecture/2604 참고
client Charset = UTF-8
7. /etc/locales.conf 수정
[root@localhost ~]# cp -a /etc/locales.conf /etc/locales.conf.original
[root@localhost ~]# vi /etc/locales.conf
[default]ser
date format = %b %e %Y %I:%M:%S:%z%p
를 아래와 같이 변경
[default]
date format = %Y-%m-%d %H:%M:%S
charset = euc-kr
8. Apache를 재시작한다.
[root@localhost ~]# systemctl restart httpd
9. php 버전 확인해서 오류가 뜨는지 확인합니다.
[root@localhost ~]# php -v
PHP 7.0.25 (cli) (built: Oct 29 2017 13:43:03) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.25, Copyright (c) 1999-2017, by Zend Technologies
10. MS-SQL 접속 테스트
tsql 파일 위치 확인
[root@localhost ~]# find / -name tsql -print
/usr/bin/tsql
[root@localhost ~]# /usr/bin/tsql --help
Usage: /usr/bin/tsql [-a <appname>] [-S <server> | -H <hostname> -p <port>] -U <username> [-P <password>] [-I <config file>] [-o <options>] [-t delim] [-r delim] [-D database]
[root@localhost ~]# /usr/bin/tsql -S [freetds.conf에 지정한 서버 이름] -p 1433 -U 디비아이디 -P '비밀번호' -D 디비네임
또는
[root@localhost ~]# /usr/bin/tsql -H xxx.xxx.xxx.xxx -p 1433 -U 디비아이디 -P '비밀번호' -D 디비네임
1> select 필드1 from dbo.테이블 where 필드2='aaa'
2> go
필드1
123456
(1 row affected)
11. SQL Server 모듈 설치 확인
php 파일 위치 확인
[root@localhost ~]# find / -name php -print
php ≤ 5.2
[root@localhost ~]# /usr/bin/php -i | grep mssql
php ≥ 5.3 , 7
[root@localhost ~]#
12. 연결을 위한 PHP 소스
<?php
$MSSQL_server = "[MSSQL]"; // freetds.conf에 지정한 서버 이름]
$MSSQL_hostT = "HOST_IP"; // SQL Server IP
$MSSQL_portT = "HOST_IP"; // SQL Server IP
$MSSQL_name = "TEST";
$MSSQL_id = "USER";
$MSSQL_pw = 'DBPW';
$mssql_conn = mssql_connect($MSSQL_SERVER, $MSSQL_USER, $MSSQL_PW);
mssql_select_db($MSSQL_NAME, $mssql_conn);
$query = "select * from table";
$result = mssql_query($query, $mssql_conn);
echo mssql_result($rs, 0, 0);
mssql_close($conn);
try {
$Conn = new PDO("dblib:host=$MSSQL_host:$MSSQL_port; dbname=$MSSQL_name;", $MSSQL_id, $MSSQL_pw);
$Conn -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch(Exception $e) {
die( print_r( $e -> getMessage() ) );
}
try {
$Qry = "SELECT * FROM [TABLE_NAME]";
$Rslt = $Conn -> prepare($Qry);
$Rslt -> execute();
$Rslt_Data = $Rslt -> fetchAll(PDO::FETCH_ASSOC);
} catch(Exception $e) {
echo $e -> getMessage();
exit;
}
foreach ( $Rslt_Data as $LIST ) {
echo "$LIST[FIELD_NAME]<br>";
}
?>
참고자료
http://faq.hostway.co.kr/Linux_WEB/1261
http://oerun.tistory.com/17
http://php.net/manual/en/function.mssql-connect.php
http://noorol.blog.me/220937312032
https://stackoverflow.com/questions/34377338/linux-php-7-0-and-mssql-microsoft-sql
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# php -v
PHP 7.0.25 (cli) (built: Oct 29 2017 13:43:03) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.25, Copyright (c) 1999-2017, by Zend Technologies
2. SQL Server 연결을 위해서는 리눅스용 드라이버가 필요합니다.
아래 사이트에서 "CentOS7.tar" 파일을 내려받는다. 현재 최신버전은 5.1.2 입니다.
https://github.com/Microsoft/msphpsql/releases
설치에 사용할 파일은 CentOS7-7.0.tar 이며, CentOS 7 + PHP 7.0 을 의미합니다.
내려받은 압축파일에는 아래와 같이 파일이 들어있으며, 필요한 파일은 "php_sqlsrv_7_nts.so" 파일입니다.
3. 파일을 서버에 업로드 합니다.
php_sqlsrv_7_nts.so 파일을 /usr/lib64/php/modules 에 복사합니다.
php_pdo_sqlsrv_7.nts.so 는 오류가 발생하므로 사용하지 않습니다.
[root@localhost ~]# cp /home/happyjung/php_sqlsrv_7_nts.so /usr/lib64/php/modules/
복사 후 권한을 설정한다.
[root@localhost ~]# chmod 755 /usr/lib64/php/modules/php_sqlsrv_7_nts.so
4. /etc/php.ini 적당한 위치에 내용 추가
[root@localhost ~]# vi /etc/php.ini
extenstion=php_sqlsrv_7_nts.so
5. SQL Server 연결을 위한 FreeTDS 설치
[root@localhost ~]# yum install freetds-devel libxml2-devel
6. /etc/freetds.conf
[root@localhost ~]# cp -a /etc/freetds.conf /etc/freetds.conf.original
[root@localhost ~]# vi /etc/freetds.conf 끝에 내용 추가
[MSSQL]
host = IP주소
port = 1433
tds version = 8.0 # https://www.happyjung.com/lecture/2604 참고
client Charset = UTF-8
7. /etc/locales.conf 수정
[root@localhost ~]# vi /etc/locales.conf
[default]ser
date format = %b %e %Y %I:%M:%S:%z%p
를 아래와 같이 변경
[default]
date format = %Y-%m-%d %H:%M:%S
charset = euc-kr
8. Apache를 재시작한다.
[root@localhost ~]# systemctl restart httpd
9. php 버전 확인해서 오류가 뜨는지 확인합니다.
[root@localhost ~]# php -v
PHP 7.0.25 (cli) (built: Oct 29 2017 13:43:03) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.25, Copyright (c) 1999-2017, by Zend Technologies
10. MS-SQL 접속 테스트
tsql 파일 위치 확인
[root@localhost ~]# find / -name tsql -print
/usr/bin/tsql
[root@localhost ~]# /usr/bin/tsql --help
Usage: /usr/bin/tsql [-a <appname>] [-S <server> | -H <hostname> -p <port>] -U <username> [-P <password>] [-I <config file>] [-o <options>] [-t delim] [-r delim] [-D database]
[root@localhost ~]# /usr/bin/tsql -S [freetds.conf에 지정한 서버 이름] -p 1433 -U 디비아이디 -P '비밀번호' -D 디비네임
또는
[root@localhost ~]# /usr/bin/tsql -H xxx.xxx.xxx.xxx -p 1433 -U 디비아이디 -P '비밀번호' -D 디비네임
1> select 필드1 from dbo.테이블 where 필드2='aaa'
2> go
필드1
123456
(1 row affected)
11. SQL Server 모듈 설치 확인
php 파일 위치 확인
[root@localhost ~]# find / -name php -print
php ≤ 5.2
[root@localhost ~]# /usr/bin/php -i | grep mssql
php ≥ 5.3 , 7
[root@localhost ~]#
12. 연결을 위한 PHP 소스
<?php
$MSSQL_server = "[MSSQL]"; // freetds.conf에 지정한 서버 이름]
$MSSQL_hostT = "HOST_IP"; // SQL Server IP
$MSSQL_portT = "HOST_IP"; // SQL Server IP
$MSSQL_name = "TEST";
$MSSQL_id = "USER";
$MSSQL_pw = 'DBPW';
mssql_select_db($MSSQL_NAME, $mssql_conn);
$query = "select * from table";
$result = mssql_query($query, $mssql_conn);
echo mssql_result($rs, 0, 0);
mssql_close($conn);
try {
$Conn = new PDO("dblib:host=$MSSQL_host:$MSSQL_port; dbname=$MSSQL_name;", $MSSQL_id, $MSSQL_pw);
$Conn -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch(Exception $e) {
die( print_r( $e -> getMessage() ) );
}
try {
$Qry = "SELECT * FROM [TABLE_NAME]";
$Rslt = $Conn -> prepare($Qry);
$Rslt -> execute();
$Rslt_Data = $Rslt -> fetchAll(PDO::FETCH_ASSOC);
} catch(Exception $e) {
echo $e -> getMessage();
exit;
}
foreach ( $Rslt_Data as $LIST ) {
echo "$LIST[FIELD_NAME]<br>";
}
?>
참고자료
http://faq.hostway.co.kr/Linux_WEB/1261
http://oerun.tistory.com/17
http://php.net/manual/en/function.mssql-connect.php
http://noorol.blog.me/220937312032
https://stackoverflow.com/questions/34377338/linux-php-7-0-and-mssql-microsoft-sql
댓글목록
등록된 댓글이 없습니다.