##########################################################################
### 제목 : 리눅스서버의 PHP 에서 MySQL 연결시 ODBC 함수 사용하기
### 쓴때 : 2010-09-06 벌초하다가 죽을 뻔한 다음날
### 쓴이 : 카폐인 (nonots@hanmail.net)
1. 개요
여태껏 리눅스 서버에서 PHP 로 웹프로그래밍 하면서 MySQL DBMS 에
ODBC 로 연결해 본 적도 없고, 그렇게 할 필요도 전혀 못느꼈는데,
어쩌다 보니 .. 그렇게 해야만 "돈준다"는 "갑"의 요청에,
또 비장한 심정으로 삽질을 해보니 되긴 된다.
암튼 덕분에 새로운 경험이었다.
2. 서버 환경
- 리눅스 CentOS 4.8,
아파치웹서버 : 2.0,
PHP 5.13,
MySQL : 5.0
3. 설정방법
1) php 에서 odbc 모듈이 활성화 되어야 한다.
만약 php 소스컴파일 당시 odbc 옵션이 없었다면 새로 컴파일 해야 할꺼다.
좀 짜증나는 일이다.
만약 rpm 이나 deb 로 설치를 했다면 그냥 yum 혹은 apt-get 등으로
php-odbc 패키지만 설치하면 된다. 내경우 다행히 APM 이 rpm 으로 설치가 되어서
php-odbc 를 yum 으로 간단하게 설치했다.
웹서버 재시작 후 phpinfo() 로 봤을 때 ODBC 항목이 제대로 나타나면 일단은 된거다.
구체적 방법은 각자가.
2) unixODBC 패키지를 설치한다.
보통 서버 설치시 기본으로 설치가 되어 있을꺼다.
안되어 있다면 역시 rpm 등으로 설치한다.
/etc/odbc.ini 나 /etc/odbcinst.ini 이런 파일이 존재한다면 이미 unixODBC 가
설치되어 있다는 증거다.
3) mysql odbc 커넥터를 설치한다.
centos 리눅스의 경우 기본 배포디렉토리에는 없고,
http://ftp.neowiz.com/pub/centos/4.8/centosplus/x86_64/RPMS/ 와 같이
cenosplus 라는 추가 배포 디렉토리에 mysql-connector-odbc-3.51 이름의 rpm이 있다.
이걸 설치하면 된다.
[root@home6 ~]# rpm -ql mysql-connector-odbc
/usr/lib64/libmyodbc3-3.51.26.so
/usr/lib64/libmyodbc3.so (요 파일경로가 아래에 사용)
/usr/lib64/libmyodbc3_r-3.51.26.so
/usr/lib64/libmyodbc3_r.so
...
아니면
http://mysql.com/downloads/connector/odbc/ 와 같이 mysql 홈페이지에서 제공하는
커넥터를 직접 다운 받아 설치하면 된다.
설치된 *.so 파일의 위치를 잘 기억해야한다.
4) /etc/odbc.ini, /etc/odbcinst.ini 파일을 적절하게 수정한다.
>>>>>>>
[root@home6 ~]# cat /etc/odbc.ini
[ODBC Data Sources]
myodbc3 = MySQL ODBC 3.51 Driver
[myodbc3]
Driver = /usr/lib64/libmyodbc3.so
Description = MySQL ODBC 3.51 Driver
Server = localhost
Port = 3306
User = mydb_user ( <= db 연결 아이디 적절하게 수정)
Password = mydb_password ( <= 적절하게 수정)
Database = mydb_name ( <= 적절하게 수정)
Option = 3
Socket = /var/lib/mysql/mysql.sock ( <= 소켓파일위치 적절하게 수정)
>>>>>>>
[root@home6 ~]# cat /etc/odbcinst.ini
# Example driver definitinions
#
# Driver from the MyODBC package
# Setup from the unixODBC package
[MySQL ODBC 3.51 Driver]
Description = MySQL ODBC 3.51 Driver
Driver = /usr/lib64/libmyodbc3.so
( 요건 mysql-connector-odbc 에서의 위치 )
Setup = /usr/lib64/libodbcmyS.so
( 요건 unixODBC 에 포함된 위치, 아마 기본값)
FileUsage = 1
위 2 개 파일에서 db이름,아이디,비번과 mysql소켓파일을 적절하게 입력하고
특히, odbcinst.ini 파일에서 Driver 항목의 커넥터 so 파일의 위치를 적는다.
이제 unixODBC 패키지 자체 포함된 isql 이라는 명령어로 odbc세팅이 잘된건지
아래와 같이 확인해 보자.
/etc/odbc.ini 에 설정한 db 와 db 아이디로 접속된다.
[root@home6 ~]# isql -v myodbc3
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
그리고 마지막으로 위 설정파일에서 Description = MySQL ODBC 3.51 Driver 를
잘 기억해 둔다.
4. PHP 소스에서 사용하기.
이건 간단하다.
아래 예제보면 금방 이해가 갈꺼다.
<?
//phpinfo(); exit;
error_reporting(E_ALL); // 디버깅 위한
ini_set("display_errors",1); // 디버깅 위한 2
// 여기 DRIVER 부분이 /etc/odbc.ini 의 Description 부분이다. 주의한다.
$conn = odbc_connect(
"DRIVER={MySQL ODBC 3.51 Driver};Server=localhost;Database=my_db_name",
"my_db_user", "my_db_password");
$sql = "SELECT * from users";
$rs = odbc_exec($conn,$sql);
echo "<table><tr>";
echo "<th>이름</th><th>이메일</th></tr>";
while (odbc_fetch_row($rs))
{
$user = odbc_result($rs,"username");
$email = odbc_result($rs,"email");
echo "<tr><td>$user</td><td>$email</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
제대로 데이타를 불러오는가? 그럼 된거다.
이제 "을"의 설움을,
새로운 기술을 습득한 기쁨의 눈물로 승화시켰다고 자위하면 된다.
5. 마무리
그런거 없다.