가끔정상
리눅스에서 PHP MySQL ODBC 사용하기.
권성재
2010. 9. 6. 16:31
########################################################################## ### 제목 : 리눅스서버의 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. 마무리 그런거 없다.