본문 바로가기

PHP관련

Linux에서의 ODBC설정 입니다

[원문] http://kltp.kldp.org/stories.php?story=01/10/25/7627472

제목그대로 Linux에서의 ODBC설정 입니다.


1.http://oplweb2.openlinksw.com/product/webmatrix.asp

먼저 이곳에서 NT에 설치를 할 openlink SW를 받아 NT에 설치를 합니다.
대충 환경에 맞게 설치를 하시고 서비스를 띄웁니다.

2.http://oplweb2.openlinksw.com/product/webmatrixsdk.asp

이곳에서 리눅스에 설치를 할 odbc와 isntall.sh을 다운 받습니다.

(이하 리눅스 작업)
3. 디렉토리를 만듭니다.
# mkdir /usr/openlink

4. 다운받은 파일을 위의 디렉토리로 옮깁니다.
# mv install.sh l3kozzzz.taz /usr/openlink

5. 설치를 합니다.
# sh install.sh

6. odbc.ini 파일을 수정, 삽입합니다.
# vi /usr/openlink/odbcsdk/doc/odbc.ini
--- 수정 ---
Driver=/home/openlink/odbcsdk/src/oplodbc.so.1

Driver=/usr/openlink/odbcsdk/lib/oplodbc.so.1
이렇게..


--- 삽입(설정에 맞게) ---
[access]
Host = <Windows server> // 아이피번호:포트
ServerType = Odbc
Database = <DSN name on server> // DSN
UserName = sa
Password =
;FetchBufferSize = 30

7. 환경설정을 합니다.
export ODBCINI=/usr/openlink/odbcsdk/doc/odbc.ini

8. 테스트를 해봅니다.
/usr/openlink/odbcsdk/examples/odbctest

Enter ODBC connect string (? shows list): DSN=access

꼭 DSN=access 라는 형식으로 적어줍니다.

환경설정이 제대로 되었다면
SQL>
이라는 프롬프트가 뜹니다. 그럼 일단 성공.

안되면 odbc.ini수정, 삽입과 export부분을 다시 해 보세요.

위의 방법후 ODBC로 접근할수 있는 방법은 몇가지가 있습니다.

여기서는 일단 PHP-ODBC를 소개하죠

위의 작업이후 아파치와 PHP를 컴파일 해야 합니다.
아래 컴파일 내용들은.. 다들 잘 아시겠죠? 긴말 안합니다.

cd apache_1.3.x
./configure --prefix=/usr/local/apache

cd ../php-4.x.x
./configure -with-iodbc=/usr/openlink/odbcsdk --with-apache=../apache_1.3.x --enable-track-vars
make
make install

cd ../apache_1.3.x
./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a
make
make install

cd ../php-4.x.x
cp php.ini-dist /usr/local/lib/php.ini

아래 예제파일을 만들어 PHP를 가동시켜 봅니다.

<?php



putenv("LD_LIBRARY_PATH=/usr/openlink/odbcsdk/lib");
putenv("ODBCINSTINI=/usr/openlink/odbcsdk/doc/odbcinst.ini");
putenv("ODBCINI=/usr/openlink/odbcsdk/doc/odbc.ini");

$dsn="access"; // 이게 안되면 "DSN=access"로 해 보세요
$user="sa";
$password="";


$sql="SELECT * FROM table";

/* directly execute mode */


if ($conn_id=odbc_connect("$dsn","$user","$password")){

echo "connected to DSN: $dsn<br><br>";

if($result_id=odbc_do($conn_id, $sql)) {

echo "executing '$sql'<br><br>";
$num_fields=odbc_num_fields($result_id);

if($num_fields>0){

echo "Number of fields: $num_fields<br>";

for($i=1;$i<=$num_fields;$i++){

$field_name[$i-1]=odbc_field_name($result_id,$i);

}

$num_rows=0;

while(odbc_fetch_row($result_id)){

for($i=1;$i<=$num_fields;$i++){

$result[$num_rows][$field_name[$i-1]]=odbc_result($result_id,$i);

}

$num_rows++;

}

echo "Number of rows: $num_rows<br>";

}else{

echo "not a field returned. <br><br>";

}

echo "Results:<br>";

for($i=0;$i<sizeof($result);$i++){

while(list($key,$value)=each($result[$i])){

echo "$i:$key=$value<br>";

}

}

echo "freeing result<br><br>";

odbc_free_result($result_id);

}else{

echo "can not execute '$sql'<BR><BR>";

}

echo "closing connection $conn_id";

odbc_close($conn_id);

}else{

echo "can not connect to DSN: $dsn<br><br>";

}

?>


주의할 점은 NT DB table상에 primary키가 무조건 있어야
select 가 된다는 겁니다.

자~ 잘 되십니까?

그럼 도움이 되셨기를...
-----
테스트사양 : 래드햇 7.1, apache_1.3.20, PHP-4.0.6

관련사이트 : http://www.iodbc.org
http://www.openlink.org
http://www.phpschool.com