|
管理員
  
|
1#
大 中
小 發表於 2009-6-10 01:48 PM 只看該作者
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
; D/ h; p. R2 C; O技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
' @0 l4 w4 \% z目錄
+ I' ^8 k" K0 L+ {) y1 如何在Linux上安裝 unixODBC + DBMaker
& d7 Z; O0 r6 y1 v+ V, f* D. y9 ]5 i9 S c( D
2 unixODBC介紹
0 I; }1 Y$ j. L, u0 p! t+ L) u& Z; W5 b: U9 Y
3 DBMaker簡介+ o j# r d+ H' T1 @- Q: i
3.1 DBMaker在Linux上的安裝
& l. ^) k) [" v- w3 n& Z3 ?( O3.2 下載DBMaker 4.2& p. {- n7 n6 d* e
3.3 安裝DBMaker6 E! ?5 ^4 e- G: J1 H
3.4 檢視安裝後的環境9 r% k- `1 n( V" J& v
& Y: w2 D; f+ Q
4 安裝unixODBC
, y) m" p, ?' F; x3 W9 f4.1 設定unixODBC連接DBMaker 4.2
! b' |0 |, }; J* \, h9 H5 Q: t 4.1.1 設定Driver3 G! p' H0 Z) {5 Z' U
4.1.2 設定ODBC DSN
, V) b( f2 J" m! k# P, ~) Z6 h 4.1.3 測試連接. k/ B, d7 {' ~' F7 o* B' P+ y$ s, n
4.2 PHP+unixODBC+DBMaker) l! e: x: o4 z0 ?! I/ K4 K
8 V1 H0 P( A9 `. e: w, s
5 結語% p7 o: m' [! G' h2 n7 K
5.1 提供了邏輯與實體資料庫的轉換
9 V; m" s) p8 ]8 `5.2 連接不同版本的DBMaker4 L6 F# b" I# Y; z4 e
5.3 更多的應用9 S) u, i4 s/ L
" O0 ` H8 v: v
y5 d" p8 }' ? o8 F
如何在Linux上安裝 unixODBC + DBMaker/ j- k) O2 y& w% O f/ \
在Windows中相當好用的ODBC Driver Manager,在Linux中卻一直沒有相同的設定;而現在Linux也有了類似的unixODBC了!在本文中,除了介紹unixODBC的設定外,也會介紹如何透過PHP去連接DBMaker資料庫,及使用unixODBC所帶來的好處。
: u% [' |$ m. p. B e# {
8 S( t% x9 Z5 K1 h: p/ H! X
% D& i$ C* ~! [4 e5 a( K& i2 n% L2 N, I0 A+ `$ q7 ?7 \
5 Z, L4 f6 r2 f/ w A2 JunixODBC介紹
' W) u' d9 ~* o, [% X3 y, wODBC(Open DataBase Connectivity)是一個跨平台的標準介面,從1990年代開始推行以來,一直廣為業界所使用,即使如今有ADO或JDBC等新的標準,在業界中卻仍時常見到這種界面。即是因為推廣的時間久及開放式的架構,讓用戶已經習慣且易於去使用它了。 8 ~+ ?( B r; _" J" P6 u
# r$ N" R2 {& R1 M
在Windows中,透過ODBC Driver Manager,各家資料庫可個自保留自己的Native Driver,然後使用一層轉接接口,將相對應的ODBC Call轉化成自己的Native API Call;但在User的角度而言,這兩者在外觀上是完全相同的,而各家資料庫則需負責將標準的ODBC Call,轉換成自己獨特的Native Call。 6 l) p: b, g- p! s$ D3 O
2 ]# i4 O; E* |1 ?& }1 A$ ]" H這樣的使用方式,讓ODBC在推出不久,即廣為用戶所接受,User也都習慣在ODBC Driver Manager中註冊自己的Driver,及設定相關的DSN(Data Source Name)。
3 m8 L& K6 R, d3 V5 E5 w" u0 D9 |: t8 g, }
這樣方便的設計,在Linux中,卻一直欠缺相同的機制;使得當要使用各式語言去連接資料庫時,便得依該語言的特性去重build一版可呼叫Native Call的模組(module),而一旦Build完後,若當中需要一些變動(如版本昇級),常常就要重build一次,這樣的設計使得Linux在使用資料庫時,極為不便!!
, `, }7 l3 N! o1 M" [1 F. q8 b4 g* x/ v- A) W& m
有鑑於此,便有一unixODBC的組織嚐試在Linux底下,建立類似ODBC Driver Manager的機制。此一機制與ODBC Driver Manager的功能相仿,便是要能提供Runtime的動態變換功能,讓AP可以透過ODBC Driver Manager,動態地載入不同的資料庫Driver,透過這樣的方式去連接資料庫。 ; J4 N' r# \6 g l' O! {, }
7 T, y2 }5 f' H! j7 G! }# N8 m7 s$ O: ?
如今,許多Distribution廠商都已經將unixODBC列為標準安裝的套件,而愈來愈廣為人知,本文即是要安裝unixODBC,並利用PHP去連接DBMaker 4.2資料庫,並由此來看看使用unixODBC所帶來的方便性。有關unixODBC的其他說明,請參閱官方網站。 0 U8 b- F7 I' n3 f7 d8 [ S$ ]
( V# `7 |+ `( W. c
DBMaker簡介, n+ w7 w! ^- L" g! h
DBMaker為一跨平台的大型關聯式資料庫,符合SQL 99標準,擁有開放式架構,在處理多媒體、全文檢索上擁有強大的搜尋性能;有關DBMaker Engine部份的介紹,請參閱DBMaker的其他相關文章,本文不再贅述,而只著重在使用unixODBC方式的介紹。 % l9 W; w3 A" R2 n$ r
" t1 p' `0 d+ c
首先DBMaker是一跨平台的大型資料庫,故在Windows、Linux上的安裝與使用幾乎是一致的。若您尚未使用過DBMaker,我們簡單介紹如何在Linux上安裝DBMaker,與其他資料庫相較,您會發現在Linux安裝DBMaker是一件相當輕鬆愉快的工作。
$ F5 J+ r; D$ p; c+ g* p/ {* y/ _5 Q; q' E. Z
DBMaker在Linux上的安裝
$ B7 `/ z M$ ~% r加入dbmaker的user 首先您須在Linux底下,加入dbmaker這個user,不要忘記請一併將密碼設定好: * d+ K/ m0 x# e# ^' `' ~8 f% T1 @
$ S2 ] D# ?4 ?- V- c1 T
3 x* z7 T, P, k& Z$ Y[root@support root]# adduser dbmaker; D S% `$ Q" R4 L' A' m) \
[root@support root]# passwd dbmaker
2 y( c' L- ?; y. ^& }% E! AChanging password for user dbmaker.# ?* s/ V+ p0 t
New password: 5 ~/ D/ J- u3 [" R6 o! s
Retype new password:
Y* j w4 p) j7 O. \, M& Spasswd: all authentication tokens updated successfully.7 g, D3 e* r% m4 @4 c4 p
7 u: C C& z' K: W2 R一般說來,除非另行指定,否則dbmaker的家目錄會放在/home/dbmaker底下。 9 N, s* H5 {! I5 c: X5 A$ H) E
5 d- G# }* G0 h0 Y4 i
下載DBMaker 4.2& n5 l8 T! s5 e$ q4 y" L5 j
接下來,請至DBMaker的官方網站下載區,去下載最新的DBMaker 4.2版本,將其放在適當的地方。(本文將其放置在/tmp底下) 0 L: |: M% r; d* d
1 k' p' F I- B# A( E[root@support tmp]# pwd
. a7 ] N7 F9 s9 |# q: D2 w/tmp
. E0 [+ G7 C( p$ E& B) p! z3 V, R# z[root@support tmp]# ls -al dbm*
' K, _/ X8 [, v1 T5 z-rwxr--r-- 1 alen alen 34649895 11§ 23 14:48 dbmaker-4.2.0-Linux2.x86.tar.gz
! k% Y5 X7 c* v9 x) u[root@support tmp]# tar zxvof dbmaker-4.2.0-Linux2.x86.tar.gz <==解壓縮4 z7 |5 a9 t7 s! r1 }+ z# t( p" E
dm420.tar+ I- n+ J E5 \3 {8 a
setup; I) U, p3 E4 r2 `
% }; c F+ m+ q" O1 j. F安裝DBMaker2 ~ p! R7 U) W" [! n3 a5 K
接下來,請切換至dbmaker這個user,並執行setup程式,為了能正確執行setup,請將setup程式改變模式成「可執行」。
8 C) O& J; @. j' [* \8 N r2 z& @4 k6 C o) u& S
9 t& e5 t; i: r& E% _% W* }9 o# s9 h[root@support tmp]# chmod a+x setup <==切換成可執行# A5 u* r& G+ c. M. a- H9 k- J
[root@support tmp]# su dbmaker <==切換成dbmaker後,進行安裝* L* L+ C1 L5 R
[dbmaker@support tmp]$ ./setup+ F8 y7 _3 D: {* |5 B% _4 k
0 ?8 X8 q3 Z0 U; v. {5 l! l, v$ H
9 L% }6 q. A0 K, k" r/ H============================================================== R1 K" e/ Z+ W/ G* W4 F, o3 E
DBMaker Database Management System Installation
& z; T* d- S0 i8 F \For DBMaker Release 4.2.0$ l" M$ L% r0 m! J
Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved.' E" q8 x E+ a: I- ]. d
==============================================================
4 W( E. Y' n9 B: h; CInstall Components:/ Y) [! K% Y& _" q/ I+ s
[A] DBMaker Server .............. (yes) Language: [ Western, Big5 ]. _4 H" x4 P$ g: `) ^
[B] DBMaker Client ............... (yes)
% g+ T* r6 q8 H! d: b[C] Sample Programs............... (yes)
6 c7 y5 q/ f" G: ?[D] Tutorial Database.............. (no)* o8 W. a3 P6 d1 j& f* ]2 ^! I
[E] Documentation ................. (no)# {1 `6 Z1 u3 P$ O
Install Path:& ?. i" \6 y9 _1 F1 f& |2 @1 Q
DBMaker Home directory: /home/dbmaker$ c6 h ^9 e: \, e" P! j8 m
[Y] Start Install [N] Quit- K$ x" { R& e5 ]! f; K
Please press [ A B C D E Y N ] Y <==為簡單計,請直接使用「Y」進行安裝
* G+ ^7 W" p# h# c6 M! r I4 u1 V5 k" V3 r1 o& k/ f
當您按下Start Install後,DBMaker就開始安裝,約1-3分鐘內,安裝便可完成,可說是又快速、又方便呢!
: @ b2 T5 z) k7 j/ p8 B) r: ^/ X, k
檢視安裝後的環境
' [% V% }& s* e/ W6 }4 y在上述安裝完DBMaker後,DBMaker會自動產生一個範例資料庫-DBSample4,我們可以用下面的方法來啟動這個資料庫:; E$ e' m: [1 x$ X, q/ ?' {8 F
1 f* i: Z: Y* Q--------------------------------------------------------------------------------# x- n0 `: R- [; T: V/ J! \: r9 C M
[dbmaker@support bin]$ cd /home/dbmaker/4.2/bin <=切換至命令目錄,注意此時使用的user為dbmaker! l+ Q( S4 E% t
[dbmaker@support bin]$ ./dmserver dbsample4 <= 使用此命令來啟動資料庫- z B* v( p! R5 _$ @& j4 i' H
DBMaker 4.2.0 (#4721, 20040924)
& ~* `6 S/ r4 R1 R' `% m9 g+ w% RCopyright(C) 1995-2004 CASEMaker Inc. All rights reserved.
. |0 O: T# G" B3 i+ y. lSQL Server bound to port 2450 <==已在埠位2450上準備接收request
) E0 Y1 B+ Z* v' G, H, m. S% p8 ~Database Server is running in the background mode., n$ T9 V4 ~6 Z4 Z5 n
Process ID = 156685 F0 g. d2 {/ c$ E8 O( D! f
2 M9 v, C* d" l" h' s9 m8 s+ n
這樣資料庫就啟動了,您可以參考DBMaker的其他手冊,使用其他工具來操作這個資料庫;(有關資料庫服務的埠位、名稱等設定,都記錄在/home/dbmaker/data/dmconfig.ini文檔中,有關此文檔中的相關設定,也請參考DBMaker線上手冊)。
4 U9 {+ p* e7 }9 f2 ^5 Z在安裝完DBMaker後,應該就可以在/home/dbmaker/4.2/lib/so中,找到DBMaker的odbc native driver。% n) Z) }- G; Q3 w/ c$ j7 ]
/ l. }% Q+ ^. C' P[dbmaker@support bin]$ ls /home/dbmaker/4.2/lib/so/
$ B1 k1 Q0 V3 m/ e) K- K1 Clibdmapic.so libdmjdbc42.so libdmxtt.so libiconv.so.2.2.0
4 U `+ d; Z. O+ s& A/ S/ _libdmapis.so libdmjsvrut.so libexpat.so libxerces-c.so
) y% C0 r1 T8 D8 z4 h+ Jlibdmdttut.so libdmudf.so libiconv.so libxerces-c.so.218 e! k4 o9 m6 [
libdmjdbaut.so libdmxtm.so libiconv.so.2 libxerces-c.so.21.0
8 o" p/ ], w% W' H( x( ~, {
2 O5 R" l5 M g+ o4 o其中的dmapic.so,便是DBMaker的native driver;由於DBMaker在開發之初,便是使用ODBC的開發介面,所以DBMaker的Native Driver,便是一符合ODBC API標準的Native Driver;而不像有些資料庫廠商,事實上還是需要另一層薄薄的轉換接口,才能將ODBC API轉成實際的Native Driver API。6 v7 E+ d5 l+ \& ^4 d1 i
5 _1 W; _9 \% P. H) v
安裝unixODBC; q5 ~( X4 A4 y" K9 q
接下來談到本文的主角-unixODBC,由於多數人已習慣RedHat的rpm安裝方式,故本文會使用rpm來安裝,至於若要自行build者,請參閱unixODBC的官方網站。/ S+ g: i1 b' K1 S- j2 z
首先至官方網站中取得最新的unixODBC package,本文使用的是2.2.3-6的版本。, R# H- U, V; c; I I' l) W8 t
接著,我們使用rpm將unixODBC安裝上去:
% q: M: d# c! @) J2 X2 n6 Y: k1 m/ k7 L/ c" R) A
[root@support tmp]# rpm -ihv unixODBC-2.2.3-6.i386.rpm
* A9 u4 n9 O5 n- U- x. Y+ T2 O2 H( _5 }warning: unixODBC-2.2.3-6.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
) \6 T' Q/ y# L$ }( EPreparing... ########################################### [100%]" ]3 ^; B# F# [* P7 [) b
[root@support RPMS]# rpm -ql unixODBC|more<==檢查一下到底安裝了那些檔案!
Q3 ~- F6 D" i, ^2 d! m/etc/odbc.ini <==這是安裝DSN的檔案,本文的重點
# F3 I! V/ f. m( F" O! |- P/etc/odbcinst.ini <==這是Driver Manager所放置的Driver設定區,亦為本文重點! g2 H/ X9 V( q
/usr/bin/dltest( C& D3 c" Y' r4 i5 Q5 O1 R1 i
/usr/bin/isql
+ g: M& B3 C( U/usr/bin/iusql% @. K* ]; T/ k2 B
/usr/bin/odbcinst
4 h) ^! X& t2 I) p* c& `$ k# V* n/usr/bin/odbctest
! F# L8 k8 d8 j! ~: Y: M+ y, o2 D2 q/usr/lib/libboundparam.so.1
6 u7 S& ]7 g) R9 D/usr/lib/libboundparam.so.1.0.0
' f. N! _1 h1 r% n) z3 Z/usr/lib/libesoobS.so.1
: c0 B3 ^ ~( S/usr/lib/libesoobS.so.1.0.08 Y9 L+ M7 { C9 ~
/usr/lib/libgtrtst.so.1
" `- P+ f% N, l! q: p1 U/usr/lib/libgtrtst.so.1.0.0
" V- ^. h0 \6 B$ r8 q5 {7 T( e$ [+ T/usr/lib/libnn.so.1
0 u2 A( C1 o- f. ?+ ^5 H/usr/lib/libnn.so.1.0.0; ^; o$ J. A) |- ]) l
/usr/lib/libodbc.so
, ]2 R- l3 T+ k* \: I0 D/usr/lib/libodbc.so.14 c3 M- D$ Q2 S- H0 a% P
/usr/lib/libodbc.so.1.0.0
$ _- G; Q3 G/ t( t............9 u: ~( j' F9 U& B
! v- @2 L6 c6 M+ ]# k! K) ?# C- K1 y, y$ R2 V
4 m) N) _7 N0 l( G) P t% |* Z
設定unixODBC連接DBMaker 4.2" N H- l) a ~2 M2 p
如上所述,我們接下來就是要將unixODBC與DBMaker的Driver串接在一起,如同在Windows上,去設定Driver Manager一樣。+ x9 S9 ~5 _. s4 H0 h
$ v1 w7 n% O1 e% U5 R
設定Driver8 J( O2 Z6 N3 q
在Windows的Driver Manager中,我們所使用的Driver,事實上也是需先向Driver Manager登記的,這個動作由於多數是由資料庫廠商的安裝程式作掉,所以User可能完全不知覺。# Z& `* F+ S4 k" e, J
但在unixODBC中,則必須由使用者自己來進行註冊Driver的動作,這個登錄的動作,即是要在/etc/odbcinst.ini中加上DBMaker相關Driver的資訊,我們首先打開這個檔案,並加上下面的幾行:
3 [! P( V! A2 T# e
$ ~/ l- C- g6 K; {1 s6 `[root@support RPMS]# more /etc/odbcinst.ini4 f* w5 k2 a7 O/ q; h N. L
# Example driver definitinions
8 G- E. i% F- ^1 G#
4 K# x1 w8 A% u8 o( Y# N6 X& u#" S6 D, D# o' N. y5 C
1 f9 q- U/ d3 p# Included in the unixODBC package1 |7 f$ i$ Q" z3 k
[PostgreSQL]4 G) b2 D6 f" u! O9 i
Description = ODBC for PostgreSQL
8 T2 h& k1 a! n4 {$ X2 k1 p J9 TDriver = /usr/lib/libodbcpsql.so
( w1 {; ?" T# M# SSetup = /usr/lib/libodbcpsqlS.so
) e- w* Q' x6 f( _FileUsage = 1, f F2 B# o5 I. E* t) N$ ?
....
8 P0 V7 R0 C# [6 M$ P: Z[DBMaker 4.2 Driver] <==這就是您向unixODBC註冊的Driver名稱,可自行定義
% w* _" } L. F! l3 f$ D* h0 B/ ^Description = ODBC for DBMaker 4.2
7 R2 k4 |) M0 R: M/ FDriver = /home/dbmaker/4.2/lib/so/libdmapic.so <==必須登記您環境中,DBMaker所使用的Driver完整路徑
( D7 ~* T, l6 o* P#Setup = /usr/lib/libodbcdbmakerS.so
* B% U: E3 u: p: }: PFileUsage = 0. M7 S8 B _& D+ m( f# }
6 s; Q$ G" ^: ]5 U0 w* g2 {: f M& W' ]3 K R
在設定Windows的Driver Manager時,在加上一個新的DSN時,資料庫廠商通常都提供一個安裝程式,讓使用者可以登記如Server位置、Port Number、須要使用什麼認證…等等。這個畫面就是上述的「Setup」,由於DBMaker目前在unixODBC中並未提供安裝畫面,故須暫時將它關閉;待之後的版本提供後,再把它開啟。
4 F/ x' H* u8 r m5 G O& W; K& B% l% o7 X7 W* Z
設定ODBC DSN; T; E- [- N e, e5 A$ l
接下來便是設定Data Source Name了(DSN),在Windows時,有所謂的System DSN及User DSN,其實主要的差別便是System DSN是可為所有User所存取,而User DSN則只能為某特定user存取;當login成另一位user時,便看不到原來User登錄的DSN了!* N+ u, ]; N( ~! W$ q8 K
而在unixODBC中,則是使用不同位置的檔案,來存放System DSN及User DSN,在我們的環境中,System DSN會放在/etc/odbc.ini,而User DSN則會放在個別User的家目錄/.odbc.ini。
$ v2 q* Y& j9 O* u: M由於我們要使用Web的PHP來連接DBMaker,所以要設定System DSN,以下是我們所放置的內容:- \4 W$ d: E9 `. B2 S) `: _: e
) H9 H7 }0 d: W- B0 w
[dbsample4]
* M* F1 F; K3 v2 h6 o" bDescription = Database for dbsample4* U: c$ [2 }7 Y2 ^4 k; L
Driver = DBMaker 4.2 Driver <==注意,此處須與之前Driver設定的名稱相同; W% Q9 R- l8 e! p5 k
Database = dbsample4 <== 資料庫名稱 N3 {8 u2 e- V( n4 k: Q& I
Host = localhost <== server所在位置
* H0 M- B* ]) P- FPort = 2450 <== 埠位置" H# X; k! k% V& Z. Z( F1 ^
User = SYSADM <==使用名稱(DBMaker預設所使用的管理者名稱). m- J4 ?7 o( A Y" g: s5 Z
Password = <==使用密碼 (DBMaker預設所使用的管理者密碼)/ n1 U. K% O d8 P w+ w6 I
當然您可以使用不同的帳號/密碼登入,但此處為方便,使用DBMaker所預設建立的管理者帳號SYSADM,及預設的密碼(空白): m. g7 V+ h8 N2 W+ L# f* Z/ j
' {8 L4 O) i+ T
測試連接
. U, F ]% z* [2 K' a8 q接下來,我們使用unixODBC所附的isql來連接dbsample4的資料庫,isql的標準語法為:
& X' t. Z$ X/ `* I- b# k/ W3 i
7 t0 K# @& H L7 l3 E: Visql DSN [UID [PWD]] [options]( K& q0 w5 S2 Y5 G- W6 ~
我們直接用下方命令來連接資料庫:2 w# E6 q4 X8 f3 S
4 U' S" P# y: d+ a& K[root@support RPMS]# isql dbsample4 sysadm
3 s5 L3 J" {/ C7 n
9 ~, Y; B: U. I. R& r+---------------------------------------+
! h9 g3 S: I# j' q4 y) w
. ? M; A& h2 [8 D' _. H' Z5 q9 a# }4 ~" P| Connected! |; @/ g" w3 b/ S/ I
& Q8 \ c% D. [" x/ A8 W+ }
| |
' l& `/ |8 ~1 G
! F; B5 M8 q* q2 r' z8 ]' ]. f| sql-statement |
" J; u; P0 C' W2 f) n9 s4 z. }: s7 S
9 _5 v2 n6 c( f- U$ \" T| help [tablename] |
' g2 |9 d [! p! C( x5 g% \/ L6 G) ~3 O4 q# x6 r. S3 e! v, M
| quit |6 N5 z) M) X$ Q% p
, F, q, l& r2 l2 u ` L+ B& Y
| |' {9 a: w9 B3 I6 r+ @1 A
& `5 d* ]2 X* p$ J9 ^
+---------------------------------------++ W0 T, W m. s$ p, E, M9 F& i
, {6 H( n, r o! H- j5 J; h
SQL> select * from SYSTABLE;2 a6 w' K1 ?3 V- y8 {3 f4 {
2 g, J6 ]) C0 {5 x' B1 B.......
; |8 f+ I9 y9 @ Q9 P; K: T6 h" p
/ r, H# x9 @ d7 m9 Y. t) j! ~; v; T/ Y
這樣便可確認我們的確能從unixODBC中,正確連接到DBMaker sample4的資料庫!& s5 V$ T; A& ^( H9 h% E5 j1 M
0 w& z. T' M4 C! z; G/ _
PHP+unixODBC+DBMaker: ]! O( q, E+ d$ _2 q5 Y& D
現在我們能用unixODBC來連接DBMaker了,剩下來的工作就簡單多了,首先我們先確認我們的php是能夠呼叫odbc function的,先用測試程式看看php是否包含了odbc呼叫:/ A6 X) g D2 ?: {. q2 Y# D
=>存成phptest.php! X$ X% m! _5 {! V0 A" p7 j
然後在Browser底下,查閱Configure Command,是否有--with-unixODBC=shared的文字!1 o2 S, D' K0 }
接著再查閱網頁中的ODBC該節,是否顯示ODBC Library為unixODBC!
2 Y% h6 |" i8 ^9 ?若是以上都無誤的話,您可以撰寫以下的程式php_odbc.php:
6 o" O* U7 C, Y' h
/ F I& B' {7 U3 s很有可能(最少筆者就碰到),此時卻顯示了無法認識odbc function call;這個問題在筆者這邊碰到時,先查了一下php裝設了那些rpm,後來便發現少裝了php-odbc這個套件,不知道是不是Distribution的問題(筆者裝的是RedHat 9.0)。當正確安裝了 php-odbc-4.2.2-17.i386.rpm後,再執行上述程式,便沒有發現錯誤了!8 ~7 ^' W8 B x0 \1 H" Q6 W
有關php的設定及它與apache的設定,網站上另有一篇專文,請自行參閱。
\! \* S, P, Y$ m( p" o: v2 s& [至此已經大功告成,user可以自行撰寫幾個簡單的測試程式,測試看看是否可以正確使用DBMaker,開始撰寫自己的網頁囉~
7 [" D. ]5 F' N0 \( g3 W- {5 ` H" f: H7 W" b
結語
* q& ^* O2 e3 G* G% T7 h& G( \+ ~使用至今,我們發現unixODBC至少提供了幾個好處:% T( }4 S; V2 w) T, c$ e" B
提供了Logical DSN對應到實體的Database Name
3 T P; S8 ?! [, P, l4 }# Q可同時連接不同版本的DBMaker
( s' j, I: d8 L7 w. U- k9 p
% _/ B+ c6 e8 y" E0 ~7 O提供了邏輯與實體資料庫的轉換# ~4 N' \" P: g" p* l6 b" t" I
這也是為何Windows ODBC Driver Manager為何歷久不衰的原因;透過odbc.ini的設定,將邏輯的資料庫名稱,對應到實際的driver及database name。這樣的設定,也一併解決了下面要說的版本問題
1 \7 `7 w! z* R3 p; T
& b# u+ i5 [# @- B0 m6 f連接不同版本的DBMaker
$ Z; Y/ ?( _6 s! y9 o. E這是筆者最喜歡的一點!在早期build PHP時,必須要使用下面的方式來生成:
" Q6 B2 ^4 t0 X% |# `- m./configure --with-apxs=/usr/sbin/apxs --with-dbmaker=/home/dbmaker/4.2 --enable-track-vars
) ~6 Q. m! U' L在這樣的設定中,其實已經把DBMaker的版本給設死在面,所build出來的libphp4.so,就是已經設死成只能連接DBMaker 4.2版本。
6 l8 }" N G' E, `( L" Y( _若是今天想寫一支php程式能同時連接3.7及4.2時,那要怎麼辦呢?這就慘了,因為在這樣的架構下,是沒有辦法作到的。
/ Z3 `7 h) N. k5 P所以筆者有些機械的php就固定只能連3.7,有些機械就是放4.0;若要跨兩個版本的Database,就只能靠別的方法了。2 W& F- b Z I# c/ }) _+ t3 w
但unixODBC提供了這一層轉換方式,讓libphp4.so不是設死只能連DBMaker 4.2,而是能動態存取外在的ini檔案後,再去連接DBMaker不同版本的so。這樣一來,筆者就能在同一支程式,靠著不同版本在odbc.ini中的設定,而能同時存取了!0 h" W# t% R7 Z
' S2 J( K4 p2 S$ k
更多的應用
y! c) `) p( a目前unixODBC已逐漸廣為人所接受,不單PHP,包括Perl、Python甚至Java-ODBC Bridge都能使用。如此一來,所有的資料源都可以集中交由unixODBC來管理,這個發展過程,在Windows Driver Manager發展之時也都有過,而它顯而易見的好處,造成了Driver Manager及ODBC的風行!而也希望透過這篇文章,幫助使用者瞭解它,學習它,使用它,最後能真正地喜歡它!
|