|
管理員
  
|
1#
大 中
小 發表於 2009-6-10 01:48 PM 只看該作者
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
( }" c: X" t& u2 r; \4 k; ?( s技術專區 - 如何在Linux上安裝 unixODBC + DBMaker ; |) Y9 l$ g+ t* \; v. \
目錄
5 I3 B9 K" u ]8 e1 如何在Linux上安裝 unixODBC + DBMaker
- Q1 z1 d( C7 b, i4 w" Y7 K5 u2 a( n# x( N) O3 J* ^3 _8 d e# \7 j
2 unixODBC介紹7 z6 D" `1 K3 j- q4 H/ o+ P
9 y+ B4 _4 j0 s$ N, I2 T- X4 {
3 DBMaker簡介
6 e5 e, y6 H9 c" I% R4 g3.1 DBMaker在Linux上的安裝
# y1 B$ k" B2 B; ?. l S- Q3.2 下載DBMaker 4.2$ Q. q) q( ]- o: p/ G$ t
3.3 安裝DBMaker! O& _% h4 P: \ ~' I
3.4 檢視安裝後的環境/ R+ b/ d) P- r8 W0 y R$ p, P
* K% ]6 t5 ~% V' w4 安裝unixODBC
4 M6 S" K- ]" L- u4.1 設定unixODBC連接DBMaker 4.2
2 \4 i" o% ^* D% [! N, o* E2 P' v 4.1.1 設定Driver
2 T' t2 @, m/ A# E; i) A 4.1.2 設定ODBC DSN
) l! `: ]$ u0 G. ~) c" Y& j 4.1.3 測試連接# k2 v$ E( z) n5 m% P2 L8 C6 d
4.2 PHP+unixODBC+DBMaker
/ {) l q4 T5 k+ O1 I B( q7 B
* ]7 V D8 S( a3 g) S: [2 l5 結語
9 r& c5 Z9 a V: I4 L) F- {5 z, \5.1 提供了邏輯與實體資料庫的轉換
: ^- p! ~, ]5 k5.2 連接不同版本的DBMaker
, ^0 F$ k A! N7 ]4 c5.3 更多的應用# z9 \- L3 C( P
8 k& J& q$ l. } Z' X V
8 l1 p# C0 H$ {* n3 E如何在Linux上安裝 unixODBC + DBMaker
( j3 X; G1 h- G8 r在Windows中相當好用的ODBC Driver Manager,在Linux中卻一直沒有相同的設定;而現在Linux也有了類似的unixODBC了!在本文中,除了介紹unixODBC的設定外,也會介紹如何透過PHP去連接DBMaker資料庫,及使用unixODBC所帶來的好處。 $ @( w) e7 N! A8 K2 Y" o
8 d" v. |: g* ~
h# f: ~9 J% ?) i: Z/ n# n
. r4 \9 j7 x. U- t( E; L9 l L5 Y1 [: N U. D2 f. w) D8 Y W2 X- \
unixODBC介紹
) x& C/ T) M- n) K& j& }ODBC(Open DataBase Connectivity)是一個跨平台的標準介面,從1990年代開始推行以來,一直廣為業界所使用,即使如今有ADO或JDBC等新的標準,在業界中卻仍時常見到這種界面。即是因為推廣的時間久及開放式的架構,讓用戶已經習慣且易於去使用它了。 & ^, b) B) T. y+ B/ Z5 }
5 j! ^& o7 \# { k在Windows中,透過ODBC Driver Manager,各家資料庫可個自保留自己的Native Driver,然後使用一層轉接接口,將相對應的ODBC Call轉化成自己的Native API Call;但在User的角度而言,這兩者在外觀上是完全相同的,而各家資料庫則需負責將標準的ODBC Call,轉換成自己獨特的Native Call。 - I+ {; d# l; G6 |
# |3 O! U% x0 I! ^7 A. z這樣的使用方式,讓ODBC在推出不久,即廣為用戶所接受,User也都習慣在ODBC Driver Manager中註冊自己的Driver,及設定相關的DSN(Data Source Name)。 % O' _ d" i7 h: K! n' A
2 ~9 C5 e* ~* W
這樣方便的設計,在Linux中,卻一直欠缺相同的機制;使得當要使用各式語言去連接資料庫時,便得依該語言的特性去重build一版可呼叫Native Call的模組(module),而一旦Build完後,若當中需要一些變動(如版本昇級),常常就要重build一次,這樣的設計使得Linux在使用資料庫時,極為不便!!
' G1 r: y/ j, J' h( ?2 U0 x$ I& p4 n9 Z% R
有鑑於此,便有一unixODBC的組織嚐試在Linux底下,建立類似ODBC Driver Manager的機制。此一機制與ODBC Driver Manager的功能相仿,便是要能提供Runtime的動態變換功能,讓AP可以透過ODBC Driver Manager,動態地載入不同的資料庫Driver,透過這樣的方式去連接資料庫。 : L" Z: B, a, d) x! Y9 O
! Q3 r5 \! X/ H
如今,許多Distribution廠商都已經將unixODBC列為標準安裝的套件,而愈來愈廣為人知,本文即是要安裝unixODBC,並利用PHP去連接DBMaker 4.2資料庫,並由此來看看使用unixODBC所帶來的方便性。有關unixODBC的其他說明,請參閱官方網站。 $ B9 a' E/ r1 i K/ A0 n4 V
% l1 l1 b4 e F# z7 s7 \; B+ V" L4 ^DBMaker簡介5 d H1 o5 }- H5 x+ a
DBMaker為一跨平台的大型關聯式資料庫,符合SQL 99標準,擁有開放式架構,在處理多媒體、全文檢索上擁有強大的搜尋性能;有關DBMaker Engine部份的介紹,請參閱DBMaker的其他相關文章,本文不再贅述,而只著重在使用unixODBC方式的介紹。
+ b* @; C; h4 I: ~9 ]5 C, _& W2 `+ x/ D# ^# G) s8 z- X% h
首先DBMaker是一跨平台的大型資料庫,故在Windows、Linux上的安裝與使用幾乎是一致的。若您尚未使用過DBMaker,我們簡單介紹如何在Linux上安裝DBMaker,與其他資料庫相較,您會發現在Linux安裝DBMaker是一件相當輕鬆愉快的工作。 * H- x9 N- K% p- q! r0 D
, P1 \" y5 b7 y1 c
DBMaker在Linux上的安裝
$ r( \ k: i4 {; e. V加入dbmaker的user 首先您須在Linux底下,加入dbmaker這個user,不要忘記請一併將密碼設定好: ! k. p: y) q8 _( u" I0 h
8 h" S1 x6 `/ S, ^/ {, J! I$ ^+ h% J4 o" Z
[root@support root]# adduser dbmaker- ~. L# c/ k: b9 {; O; p) a
[root@support root]# passwd dbmaker8 n( [6 ~* a+ H. @% V% c2 Y$ O% m
Changing password for user dbmaker.
0 w8 H2 v# }8 O+ Q! d+ jNew password: ( }% E( o8 b$ G( k; D6 m0 S
Retype new password: 4 t3 K: a' a6 W7 c
passwd: all authentication tokens updated successfully.% d7 Q; [4 M! e" z; }9 ~* O5 Y, p
0 b- g N5 B$ s- v( @一般說來,除非另行指定,否則dbmaker的家目錄會放在/home/dbmaker底下。 + }' g1 ~1 ^# p, A) C3 ~
j$ Q4 }/ i2 H5 }7 L下載DBMaker 4.2
1 L2 P' b5 A. Z接下來,請至DBMaker的官方網站下載區,去下載最新的DBMaker 4.2版本,將其放在適當的地方。(本文將其放置在/tmp底下)
8 R w% w" }% D* H1 r( M( g0 B. e! {7 _% W/ n+ ]9 c$ G, c7 ]
[root@support tmp]# pwd
6 X9 S0 {! ?' {4 w0 R( r+ M/tmp
3 |( `4 m: m8 @# ][root@support tmp]# ls -al dbm*3 r: y9 R/ Z9 H! i& i
-rwxr--r-- 1 alen alen 34649895 11§ 23 14:48 dbmaker-4.2.0-Linux2.x86.tar.gz
0 u% i# x5 U/ Q/ o* e7 Q. } t[root@support tmp]# tar zxvof dbmaker-4.2.0-Linux2.x86.tar.gz <==解壓縮/ m) {4 {2 r5 f& R: `
dm420.tar- O1 r7 w% z" l- S
setup
! o' k7 X" E" r1 S* J) b7 x7 h
* t4 Q" R0 w, c9 m4 ^( d安裝DBMaker
5 Y: T0 n4 r; z0 E' Q6 p6 t接下來,請切換至dbmaker這個user,並執行setup程式,為了能正確執行setup,請將setup程式改變模式成「可執行」。
& f4 V, E# ~& P8 `" s. n4 X
- Z2 H" o- K" | P. U1 m
6 T Q/ ?# Q3 Z3 J, \[root@support tmp]# chmod a+x setup <==切換成可執行* p; G7 b/ l7 {) Y& w
[root@support tmp]# su dbmaker <==切換成dbmaker後,進行安裝
' x) h1 Q. G9 Y[dbmaker@support tmp]$ ./setup
( p+ E' U3 k. X) O6 |+ {; b8 s
" v: x ~2 D! Q2 J2 d9 \; ~; [
) f5 | E; H' r0 g& Y/ O6 y==============================================================
1 D5 \/ z. v- U2 ]" q% nDBMaker Database Management System Installation y6 d# D3 h4 [% g1 ?6 ?
For DBMaker Release 4.2.0/ }: s; ~# J) N5 e0 a
Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved.. ]: I' P4 |2 K* O
==============================================================& ?5 I, z) T7 ?: g8 ^
Install Components:( ~+ ], M6 O6 h, [- E
[A] DBMaker Server .............. (yes) Language: [ Western, Big5 ]
1 Q+ Z* U/ G8 j8 q[B] DBMaker Client ............... (yes)
- j% ~' X+ S- ?+ P) ^[C] Sample Programs............... (yes)* a7 `6 X9 X* M( Z6 D3 b
[D] Tutorial Database.............. (no) I! O/ @! G( u$ r' n3 g
[E] Documentation ................. (no)
5 h0 _# g% C7 i& ~4 d. Q( u& uInstall Path:
0 q; ^0 J' J! lDBMaker Home directory: /home/dbmaker
3 }& D) F( L r8 Q$ U3 E[Y] Start Install [N] Quit
" P L. J! V7 U: k; ePlease press [ A B C D E Y N ] Y <==為簡單計,請直接使用「Y」進行安裝
" _" H' U9 o8 z; a9 m4 g9 ^4 _$ y2 D$ f
當您按下Start Install後,DBMaker就開始安裝,約1-3分鐘內,安裝便可完成,可說是又快速、又方便呢!
+ e9 y3 H; r' \% G0 O$ d* A! v; h
3 S. i+ X, m5 m9 G2 f2 n檢視安裝後的環境
8 a* m: c* y& p1 b, N2 I6 h在上述安裝完DBMaker後,DBMaker會自動產生一個範例資料庫-DBSample4,我們可以用下面的方法來啟動這個資料庫:, C& T3 P& v7 j$ R
" Q* U% X! e! O; X7 ^5 F
--------------------------------------------------------------------------------3 E: C6 X% t, k U7 Z7 i5 p. P
[dbmaker@support bin]$ cd /home/dbmaker/4.2/bin <=切換至命令目錄,注意此時使用的user為dbmaker!
- u8 ~7 J$ s" o, c( Q) h9 k[dbmaker@support bin]$ ./dmserver dbsample4 <= 使用此命令來啟動資料庫5 L' L' P$ O8 F+ g w
DBMaker 4.2.0 (#4721, 20040924)
, J' u) M5 a% `4 Q/ oCopyright(C) 1995-2004 CASEMaker Inc. All rights reserved.( p6 N. r7 V$ ^3 Q; c0 {+ _
SQL Server bound to port 2450 <==已在埠位2450上準備接收request
5 _. T& U: F5 k9 M. GDatabase Server is running in the background mode.
^: F# U6 J0 {! AProcess ID = 15668
( P' c0 i; m7 n# m- [/ N2 x# v6 @# ?8 ~
這樣資料庫就啟動了,您可以參考DBMaker的其他手冊,使用其他工具來操作這個資料庫;(有關資料庫服務的埠位、名稱等設定,都記錄在/home/dbmaker/data/dmconfig.ini文檔中,有關此文檔中的相關設定,也請參考DBMaker線上手冊)。
. r# s7 j- \' g/ j7 _) Q在安裝完DBMaker後,應該就可以在/home/dbmaker/4.2/lib/so中,找到DBMaker的odbc native driver。) i# ]6 u+ W2 @! }0 B
% B6 P; S6 K5 l/ p& T5 A. P1 \[dbmaker@support bin]$ ls /home/dbmaker/4.2/lib/so/
- `/ Q& E: |9 n. U; Q# mlibdmapic.so libdmjdbc42.so libdmxtt.so libiconv.so.2.2.09 n' C: \4 b$ T0 e* @
libdmapis.so libdmjsvrut.so libexpat.so libxerces-c.so s% j" w4 s7 M/ g8 ?% x# w2 j
libdmdttut.so libdmudf.so libiconv.so libxerces-c.so.21/ H3 \* J8 |$ ~0 X
libdmjdbaut.so libdmxtm.so libiconv.so.2 libxerces-c.so.21.0
1 D. R+ O" w' @ p7 A3 Q3 s, n+ |
) T0 }$ I% o# f, z3 ?# `其中的dmapic.so,便是DBMaker的native driver;由於DBMaker在開發之初,便是使用ODBC的開發介面,所以DBMaker的Native Driver,便是一符合ODBC API標準的Native Driver;而不像有些資料庫廠商,事實上還是需要另一層薄薄的轉換接口,才能將ODBC API轉成實際的Native Driver API。0 p+ \ K {9 [- ^* t6 W
1 f- G. \; v5 r) }# |安裝unixODBC% s( x% d$ x: |2 V
接下來談到本文的主角-unixODBC,由於多數人已習慣RedHat的rpm安裝方式,故本文會使用rpm來安裝,至於若要自行build者,請參閱unixODBC的官方網站。
L) O# v( h- Q$ V; n" n首先至官方網站中取得最新的unixODBC package,本文使用的是2.2.3-6的版本。
) B9 H3 F4 z: ~& g1 r" b. ^接著,我們使用rpm將unixODBC安裝上去:
, F' m' R& i( `/ ?, A$ i+ S2 ^% _+ @0 g) e. K$ m' O
[root@support tmp]# rpm -ihv unixODBC-2.2.3-6.i386.rpm
) F/ |" f9 K* ^warning: unixODBC-2.2.3-6.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
4 k7 F$ E. \. a M4 G5 \3 aPreparing... ########################################### [100%]" Z, I3 x5 P' g0 D5 c% E2 z# m8 L
[root@support RPMS]# rpm -ql unixODBC|more<==檢查一下到底安裝了那些檔案!! u' d, F( j" t
/etc/odbc.ini <==這是安裝DSN的檔案,本文的重點
" b( p- k* w8 \. A! D) G/etc/odbcinst.ini <==這是Driver Manager所放置的Driver設定區,亦為本文重點& ] ]2 o+ f3 P( p9 H% x
/usr/bin/dltest6 F% ?6 o: V) t a
/usr/bin/isql
6 B* t9 M/ k' X9 y/usr/bin/iusql
& Z1 M& m. K( X |$ D/usr/bin/odbcinst: Y- t! q. s$ ?0 c
/usr/bin/odbctest
" z. X- p. `6 F/ a" [# `$ ^" |/usr/lib/libboundparam.so.1
N& }1 G4 N5 \1 x6 w8 W7 z/ m# t/usr/lib/libboundparam.so.1.0.0# O- o* V. B6 v0 N( L! G" c
/usr/lib/libesoobS.so.1
8 \ Z W, a% s2 j7 o0 o; V/usr/lib/libesoobS.so.1.0.0
7 d' C, m0 V( y' K* {/usr/lib/libgtrtst.so.16 @1 A6 d9 n) l
/usr/lib/libgtrtst.so.1.0.0
c; P; p) k% ?. H, R n% J/usr/lib/libnn.so.10 V1 @# Q2 A' A$ i5 N' l; W$ o
/usr/lib/libnn.so.1.0.01 C7 }* ?& Z$ W% q) Z0 V% a
/usr/lib/libodbc.so$ o5 a! N5 K( f3 o" q+ c
/usr/lib/libodbc.so.1. |1 i D1 {6 J8 t
/usr/lib/libodbc.so.1.0.06 }4 ~- B' n* I+ A
............
3 ]9 n& T3 J. P: l
6 T2 u4 P2 c3 D: N
% {: z- {3 y7 @% M( e2 ^1 @# H
4 ~2 T& f) p! U設定unixODBC連接DBMaker 4.2: I3 |# j1 P# r/ e8 T! M0 ~- r( R7 t
如上所述,我們接下來就是要將unixODBC與DBMaker的Driver串接在一起,如同在Windows上,去設定Driver Manager一樣。
- [1 w: U: `% Q4 c' Z
) T5 Y: Z* G& E A0 w5 S" ?2 f! X# ^設定Driver, w2 r9 O, s, J! k1 S8 O) |7 q- c
在Windows的Driver Manager中,我們所使用的Driver,事實上也是需先向Driver Manager登記的,這個動作由於多數是由資料庫廠商的安裝程式作掉,所以User可能完全不知覺。' U' F1 y2 Z; }. B5 z+ C5 o
但在unixODBC中,則必須由使用者自己來進行註冊Driver的動作,這個登錄的動作,即是要在/etc/odbcinst.ini中加上DBMaker相關Driver的資訊,我們首先打開這個檔案,並加上下面的幾行:3 |4 B \& a3 M7 Q& D! ^
2 N/ F6 p) |0 V2 X% e, d. a% c
[root@support RPMS]# more /etc/odbcinst.ini
8 C# W8 J1 ?) L! F( C) S# Example driver definitinions
: V7 g6 F6 G+ `' B# W& B- C, y# j8 ^( f- G
#- W4 q* Q; t6 P* ^
4 E: X% e/ m2 S3 F" T) Q
# Included in the unixODBC package
; ?4 b3 `- H) i8 z) d2 p, J[PostgreSQL]' C, X' _: _% J) E( ?5 z: |- v
Description = ODBC for PostgreSQL; |. d* S' S$ ^. f0 V4 f
Driver = /usr/lib/libodbcpsql.so5 L2 Y' r- L9 N. y4 P+ s9 C
Setup = /usr/lib/libodbcpsqlS.so, i6 k% C/ A6 O5 o: V0 }5 W0 ^
FileUsage = 12 t8 X( A+ I) y) Y" L8 k# U
....
0 E0 q6 n8 B3 \7 }: A[DBMaker 4.2 Driver] <==這就是您向unixODBC註冊的Driver名稱,可自行定義
: U: ]) l/ h" SDescription = ODBC for DBMaker 4.2
- u" r# M/ y. [, L. K' X& w2 _Driver = /home/dbmaker/4.2/lib/so/libdmapic.so <==必須登記您環境中,DBMaker所使用的Driver完整路徑
* ]" E2 U4 E/ @8 b# |) }#Setup = /usr/lib/libodbcdbmakerS.so7 c; {9 G& A, X
FileUsage = 0
0 D* z3 Z8 f+ e
3 B' O# e+ |2 o- q4 W2 p& h/ | G G5 H1 K+ D
在設定Windows的Driver Manager時,在加上一個新的DSN時,資料庫廠商通常都提供一個安裝程式,讓使用者可以登記如Server位置、Port Number、須要使用什麼認證…等等。這個畫面就是上述的「Setup」,由於DBMaker目前在unixODBC中並未提供安裝畫面,故須暫時將它關閉;待之後的版本提供後,再把它開啟。
; m& n! t6 B# b! v v7 b
, Y6 V9 w5 ^9 }) M設定ODBC DSN
6 C# K( `' W$ n" U3 O3 o8 s7 L6 W接下來便是設定Data Source Name了(DSN),在Windows時,有所謂的System DSN及User DSN,其實主要的差別便是System DSN是可為所有User所存取,而User DSN則只能為某特定user存取;當login成另一位user時,便看不到原來User登錄的DSN了!( f1 b; l$ Z. o0 ~* [0 R" F
而在unixODBC中,則是使用不同位置的檔案,來存放System DSN及User DSN,在我們的環境中,System DSN會放在/etc/odbc.ini,而User DSN則會放在個別User的家目錄/.odbc.ini。7 h/ t( _- C8 `4 F! g$ j
由於我們要使用Web的PHP來連接DBMaker,所以要設定System DSN,以下是我們所放置的內容:- R- O$ k3 m+ c! x, | |
1 Y( I, h5 _( j[dbsample4]- o5 B: G! J; p- I" Y, @
Description = Database for dbsample4
1 q& _$ D5 J& D+ Q* U% x- F" m5 eDriver = DBMaker 4.2 Driver <==注意,此處須與之前Driver設定的名稱相同
: j3 j( x! g4 U3 M0 CDatabase = dbsample4 <== 資料庫名稱; M' d* I C) ~8 R9 h# S$ x {4 ?
Host = localhost <== server所在位置 q9 B5 L6 o! T
Port = 2450 <== 埠位置3 S) @- H/ Z3 c ?
User = SYSADM <==使用名稱(DBMaker預設所使用的管理者名稱)8 M; K8 @! E0 w
Password = <==使用密碼 (DBMaker預設所使用的管理者密碼)
2 a; h" X0 |4 Q- E1 _- I. N) T當然您可以使用不同的帳號/密碼登入,但此處為方便,使用DBMaker所預設建立的管理者帳號SYSADM,及預設的密碼(空白)! k" R9 ?' ]5 O& I) m4 h+ x
3 m3 \8 L3 B I+ l' k& V/ Y測試連接) o4 D3 ^* ?1 } s: O
接下來,我們使用unixODBC所附的isql來連接dbsample4的資料庫,isql的標準語法為:/ N' y6 U+ I! w- }$ D: E2 q
# C' `7 O' m# ?isql DSN [UID [PWD]] [options]1 [2 D6 k2 U* _* Z! z
我們直接用下方命令來連接資料庫:. N' e% u7 o/ C, L6 v
; o7 ?5 e* {( M2 k
[root@support RPMS]# isql dbsample4 sysadm
7 ~0 `8 p- B8 r. h# u0 J, }" o6 p8 L% p2 |3 \# C5 F( o
+---------------------------------------+4 P, N$ Q- n' H( } C( B
: E, [2 ?, l/ @' _
| Connected! |
: L& N' r+ n/ e/ Q- r, J1 X' }1 `! W6 e; _/ `
| |$ ^; f3 }7 @, }( J
/ k0 @9 `: c, L+ j$ @| sql-statement |1 Z' Y$ [$ I6 n+ U- I( I
% G X( f7 n2 E1 O2 |, i
| help [tablename] |( v9 g K' R1 D+ a/ }" \
1 J0 @+ A" H; r0 ~| quit |& I2 L t$ x y& S& {
. S# \: Z7 P! q* m9 c& S y| |# m" \! _; w1 t3 W }/ f2 F
0 y- x8 O0 i. Z, Q# d% X* q+---------------------------------------+% K7 x8 k* h5 C6 t% z, X
6 l1 n- s6 Q: N$ }
SQL> select * from SYSTABLE;1 K) Z" K6 g# ?* E' g
4 c4 e4 T% D7 y
.......7 k- i# l2 [) i: Y$ N' O
' P% @6 P8 f1 l/ d
% o S: Q- y6 {這樣便可確認我們的確能從unixODBC中,正確連接到DBMaker sample4的資料庫!) ~& ]1 @; @- h
; g {! r% \7 {% nPHP+unixODBC+DBMaker( U2 ?# u Z. O U5 p
現在我們能用unixODBC來連接DBMaker了,剩下來的工作就簡單多了,首先我們先確認我們的php是能夠呼叫odbc function的,先用測試程式看看php是否包含了odbc呼叫:
- j' C% ^4 B5 T& Z) b6 T=>存成phptest.php {9 U) @, Q4 ?' M* ^3 \. c
然後在Browser底下,查閱Configure Command,是否有--with-unixODBC=shared的文字!
* E7 B; J u- j1 A接著再查閱網頁中的ODBC該節,是否顯示ODBC Library為unixODBC!3 c) _$ j; U+ t# [$ m, r1 P
若是以上都無誤的話,您可以撰寫以下的程式php_odbc.php:
! h: _7 C) ~' l) `% V% z$ G3 {( {( h' n- Y1 N5 e1 A6 u
很有可能(最少筆者就碰到),此時卻顯示了無法認識odbc function call;這個問題在筆者這邊碰到時,先查了一下php裝設了那些rpm,後來便發現少裝了php-odbc這個套件,不知道是不是Distribution的問題(筆者裝的是RedHat 9.0)。當正確安裝了 php-odbc-4.2.2-17.i386.rpm後,再執行上述程式,便沒有發現錯誤了!5 M8 R* `1 p, ?5 {
有關php的設定及它與apache的設定,網站上另有一篇專文,請自行參閱。# g2 h+ N0 A7 u
至此已經大功告成,user可以自行撰寫幾個簡單的測試程式,測試看看是否可以正確使用DBMaker,開始撰寫自己的網頁囉~
6 o% Q# a; B m* ~/ ?9 E
6 t' ^. Y' K) ]* z2 b6 d結語
; `' w* h0 f5 J) Z! q使用至今,我們發現unixODBC至少提供了幾個好處:
) g" e8 U) u9 T6 L+ H6 f. n! Q1 Y提供了Logical DSN對應到實體的Database Name
+ I3 C7 \* M t: v0 _, F; f可同時連接不同版本的DBMaker ; W( e, s$ L% |9 k; ]
, i* y* O$ Q# c" S
提供了邏輯與實體資料庫的轉換; k" A0 r: t1 p3 G4 o: i
這也是為何Windows ODBC Driver Manager為何歷久不衰的原因;透過odbc.ini的設定,將邏輯的資料庫名稱,對應到實際的driver及database name。這樣的設定,也一併解決了下面要說的版本問題
1 t% {7 x) n+ ~0 ^: c3 M- W7 b- J! `
連接不同版本的DBMaker* [* B( n3 x6 Y' t3 l& T
這是筆者最喜歡的一點!在早期build PHP時,必須要使用下面的方式來生成:
/ \/ Y. T8 ?2 ^& Y" B# r: x./configure --with-apxs=/usr/sbin/apxs --with-dbmaker=/home/dbmaker/4.2 --enable-track-vars; M, x0 M* S5 \/ l* U
在這樣的設定中,其實已經把DBMaker的版本給設死在面,所build出來的libphp4.so,就是已經設死成只能連接DBMaker 4.2版本。
! I# R9 r2 v; R若是今天想寫一支php程式能同時連接3.7及4.2時,那要怎麼辦呢?這就慘了,因為在這樣的架構下,是沒有辦法作到的。) X4 r7 y# d9 E; u
所以筆者有些機械的php就固定只能連3.7,有些機械就是放4.0;若要跨兩個版本的Database,就只能靠別的方法了。
8 r# `. @1 r8 N' j$ U3 B& `3 o2 N但unixODBC提供了這一層轉換方式,讓libphp4.so不是設死只能連DBMaker 4.2,而是能動態存取外在的ini檔案後,再去連接DBMaker不同版本的so。這樣一來,筆者就能在同一支程式,靠著不同版本在odbc.ini中的設定,而能同時存取了!9 {# y& h# D0 y, \- ?3 ~
$ A a2 a! N8 C. o
更多的應用
2 [! ^1 L" }/ T0 D- Z目前unixODBC已逐漸廣為人所接受,不單PHP,包括Perl、Python甚至Java-ODBC Bridge都能使用。如此一來,所有的資料源都可以集中交由unixODBC來管理,這個發展過程,在Windows Driver Manager發展之時也都有過,而它顯而易見的好處,造成了Driver Manager及ODBC的風行!而也希望透過這篇文章,幫助使用者瞭解它,學習它,使用它,最後能真正地喜歡它!
|