管理員
|
1#
大 中
小 發表於 2009-6-10 01:48 PM 只看該作者
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
0 H. x- `6 K0 f2 J4 r; A7 A8 _技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
( h) W8 q# g: ^% n5 ~+ i; E5 J) K6 q目錄
e6 ]. H6 s6 P$ I( }$ `, o1 如何在Linux上安裝 unixODBC + DBMaker
5 ?1 |9 R8 q, W5 W
2 U# G) C& H, F6 p" N) b T2 B2 unixODBC介紹8 c9 F1 }3 ~9 P" `( H
: c$ Q( m9 v- a0 [' w3 DBMaker簡介9 R$ R! ]4 T+ H' ?8 j% M; R6 S
3.1 DBMaker在Linux上的安裝
! f7 n+ o- s) B" B3.2 下載DBMaker 4.2( t* b3 ?0 d/ p; q% ^: M
3.3 安裝DBMaker
# d P/ u9 n# U$ {/ M3.4 檢視安裝後的環境
" i+ u7 R# Z% I |+ E8 {
- }3 r" m! k7 Z$ z4 安裝unixODBC% j: P7 D) O- D% w
4.1 設定unixODBC連接DBMaker 4.2 i: U! Q% `, Z4 e# B- s
4.1.1 設定Driver" E) U0 ^& h1 ^5 s7 y4 D. c
4.1.2 設定ODBC DSN! u& |, ] Y7 ?& \' o
4.1.3 測試連接8 \& d; s9 }+ u
4.2 PHP+unixODBC+DBMaker
% N+ w; e! E; d, Y8 E6 m: ], |- ]1 Q# S" m$ ^
5 結語
( [; x+ r2 A- n6 v' a5.1 提供了邏輯與實體資料庫的轉換
, y! |. q' Q/ @: m+ }: V/ f j: ]5.2 連接不同版本的DBMaker1 a" C- h* D" L: z+ ?8 @1 e$ ]( y' {
5.3 更多的應用
7 G/ s& _2 a/ r2 a/ n! ?3 r7 f, s( ^ d5 n; J0 p L7 B/ |
8 y6 Y* ?6 `) x! ]5 Q. d. A9 k
如何在Linux上安裝 unixODBC + DBMaker
) Z$ ]) C2 J2 N3 Z: C% A在Windows中相當好用的ODBC Driver Manager,在Linux中卻一直沒有相同的設定;而現在Linux也有了類似的unixODBC了!在本文中,除了介紹unixODBC的設定外,也會介紹如何透過PHP去連接DBMaker資料庫,及使用unixODBC所帶來的好處。 2 H! p' ~/ x* }7 ^2 X- W W4 L
+ a+ F3 L3 T6 L4 u; w
9 P# U4 A. Z' |( f) N' K2 g, F1 @# g' ]& Q
8 M- ^% W- q2 v4 p7 I Q) B7 KunixODBC介紹
" W- R0 U- b& A l4 `, n$ {ODBC(Open DataBase Connectivity)是一個跨平台的標準介面,從1990年代開始推行以來,一直廣為業界所使用,即使如今有ADO或JDBC等新的標準,在業界中卻仍時常見到這種界面。即是因為推廣的時間久及開放式的架構,讓用戶已經習慣且易於去使用它了。
; [5 T, I; e8 O: m& q C" Y0 f8 I% A, s+ x( \
在Windows中,透過ODBC Driver Manager,各家資料庫可個自保留自己的Native Driver,然後使用一層轉接接口,將相對應的ODBC Call轉化成自己的Native API Call;但在User的角度而言,這兩者在外觀上是完全相同的,而各家資料庫則需負責將標準的ODBC Call,轉換成自己獨特的Native Call。 9 Y1 K/ v u- M, t1 \; S, S
& ^/ v4 ^% R1 r$ ]( V, q j9 l1 g這樣的使用方式,讓ODBC在推出不久,即廣為用戶所接受,User也都習慣在ODBC Driver Manager中註冊自己的Driver,及設定相關的DSN(Data Source Name)。
! ~% g7 e* R& j: M% X+ w! \( I
9 y- q$ n7 f- T c R- I這樣方便的設計,在Linux中,卻一直欠缺相同的機制;使得當要使用各式語言去連接資料庫時,便得依該語言的特性去重build一版可呼叫Native Call的模組(module),而一旦Build完後,若當中需要一些變動(如版本昇級),常常就要重build一次,這樣的設計使得Linux在使用資料庫時,極為不便!!
% T( [& z8 `3 y0 H
( i% H z; J4 J. j4 u有鑑於此,便有一unixODBC的組織嚐試在Linux底下,建立類似ODBC Driver Manager的機制。此一機制與ODBC Driver Manager的功能相仿,便是要能提供Runtime的動態變換功能,讓AP可以透過ODBC Driver Manager,動態地載入不同的資料庫Driver,透過這樣的方式去連接資料庫。
7 d' G3 J. r/ l. r8 V
* W" r& j l% A; B6 f+ v0 ^ E如今,許多Distribution廠商都已經將unixODBC列為標準安裝的套件,而愈來愈廣為人知,本文即是要安裝unixODBC,並利用PHP去連接DBMaker 4.2資料庫,並由此來看看使用unixODBC所帶來的方便性。有關unixODBC的其他說明,請參閱官方網站。
. s+ k' K2 w5 i( W- p* F5 Y5 Q( Q( d# x/ r8 d
DBMaker簡介; Y, R4 b, K5 X1 f
DBMaker為一跨平台的大型關聯式資料庫,符合SQL 99標準,擁有開放式架構,在處理多媒體、全文檢索上擁有強大的搜尋性能;有關DBMaker Engine部份的介紹,請參閱DBMaker的其他相關文章,本文不再贅述,而只著重在使用unixODBC方式的介紹。
& U: C. w# w7 ?! z; ` [- ^) U1 J2 H }
首先DBMaker是一跨平台的大型資料庫,故在Windows、Linux上的安裝與使用幾乎是一致的。若您尚未使用過DBMaker,我們簡單介紹如何在Linux上安裝DBMaker,與其他資料庫相較,您會發現在Linux安裝DBMaker是一件相當輕鬆愉快的工作。
6 W# l4 ^0 J. j! Y. j1 I8 n
0 t+ b/ h. z+ F9 @DBMaker在Linux上的安裝
' ]+ G0 M1 S" v/ J, O' ^. W/ @加入dbmaker的user 首先您須在Linux底下,加入dbmaker這個user,不要忘記請一併將密碼設定好:
( k' \: ^6 J7 b9 `# w J7 t( L0 s% E: T b9 i+ S% ?# L# O5 g, ]1 `5 }9 x
$ F2 ?, ~) [8 q4 k$ P[root@support root]# adduser dbmaker
1 E# W3 f0 P, x[root@support root]# passwd dbmaker7 X) [( ^2 I. j) d6 ]
Changing password for user dbmaker.0 U6 r3 f" m$ c: @0 g
New password:
) J( }& K* o: i$ `5 NRetype new password: / _; _ S1 x- q' X1 k8 ^4 f0 Q; n
passwd: all authentication tokens updated successfully.+ P- [2 L% U2 B% i0 A7 F
% L& a2 `4 m6 [' N一般說來,除非另行指定,否則dbmaker的家目錄會放在/home/dbmaker底下。
) l- K: ^1 D0 T4 J5 {* x& {4 k, I0 B; V) \$ ^
下載DBMaker 4.2
& q* q! }: b' M7 o接下來,請至DBMaker的官方網站下載區,去下載最新的DBMaker 4.2版本,將其放在適當的地方。(本文將其放置在/tmp底下)
6 D- ~: _( i% `
) r, @7 o% a) f2 \# ^7 _6 Z( o( m[root@support tmp]# pwd
: i- u- U7 `7 I9 `' ?$ m8 m# Z/ h/tmp; A1 ^( {9 t) _" E, O6 `1 I
[root@support tmp]# ls -al dbm*. q# w, J" L$ s! I
-rwxr--r-- 1 alen alen 34649895 11§ 23 14:48 dbmaker-4.2.0-Linux2.x86.tar.gz
' X2 \# [) E, u- S[root@support tmp]# tar zxvof dbmaker-4.2.0-Linux2.x86.tar.gz <==解壓縮
6 X* U, ^* q+ a7 Pdm420.tar
- _( h6 f, B+ M" z) B2 d2 qsetup4 }- s; D" M" u* I3 e1 e
7 A. f0 L6 w; d! G: @
安裝DBMaker
& [, P7 f" n) O' d6 T1 @, P接下來,請切換至dbmaker這個user,並執行setup程式,為了能正確執行setup,請將setup程式改變模式成「可執行」。
, [' C/ I. w& q! F0 j
! q. h7 O5 o) U% z8 T: F: D# x8 h" m+ `% W, h0 m) G
[root@support tmp]# chmod a+x setup <==切換成可執行) X* U4 |% q9 u
[root@support tmp]# su dbmaker <==切換成dbmaker後,進行安裝
7 s/ c# M. R; C[dbmaker@support tmp]$ ./setup
# K6 I( ]8 g# _
* z& J, i+ W, d1 [2 B j+ J2 k3 g: m$ ?: K6 q
==============================================================# L7 x7 J4 ~; I( O) p
DBMaker Database Management System Installation
* _7 ^ P1 A3 ` R# LFor DBMaker Release 4.2.07 D% S4 k% N8 C; u1 ^" {+ S% L
Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved. d& w: A0 i7 F# S0 a6 u: h- T
==============================================================
- o% E! M, j4 e9 _$ {3 qInstall Components:0 u# N0 l+ b7 I% ^
[A] DBMaker Server .............. (yes) Language: [ Western, Big5 ]9 V) e( H& s$ Y& Q/ x
[B] DBMaker Client ............... (yes)9 Q$ V, u" v3 R
[C] Sample Programs............... (yes)) F3 m: c9 e5 ]3 g7 f* @
[D] Tutorial Database.............. (no)" b' K g) U3 Q
[E] Documentation ................. (no)
; [' h5 k6 h$ \( I+ JInstall Path:
* k" F2 M5 g s/ }- v: G1 vDBMaker Home directory: /home/dbmaker. H7 Q& m% X0 @6 U4 w
[Y] Start Install [N] Quit
7 m- Y' r: u: A7 q, NPlease press [ A B C D E Y N ] Y <==為簡單計,請直接使用「Y」進行安裝
/ b- i" r3 o& W3 C* b' |+ ?
2 E" m1 J* `; B9 `7 e當您按下Start Install後,DBMaker就開始安裝,約1-3分鐘內,安裝便可完成,可說是又快速、又方便呢!
9 j" G/ T! p% l( G3 T w
& L* u0 s. y" Y) [! ]檢視安裝後的環境" @1 g5 i5 A3 F S
在上述安裝完DBMaker後,DBMaker會自動產生一個範例資料庫-DBSample4,我們可以用下面的方法來啟動這個資料庫:
) W* e$ [) q7 Q( y5 D/ I3 O6 u" D4 h! g2 |
--------------------------------------------------------------------------------# J+ Y4 g) b( q6 G; h- \ S+ k' V
[dbmaker@support bin]$ cd /home/dbmaker/4.2/bin <=切換至命令目錄,注意此時使用的user為dbmaker!4 ?) r" ~$ o b4 r3 _/ T) ]4 ?
[dbmaker@support bin]$ ./dmserver dbsample4 <= 使用此命令來啟動資料庫( s" `' H. ?8 r! r
DBMaker 4.2.0 (#4721, 20040924)/ h# c# H ], f4 @6 O& |5 ^
Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved.
( W! b! E6 l9 T/ M8 l, iSQL Server bound to port 2450 <==已在埠位2450上準備接收request) z& g; d: { \ m2 B7 |
Database Server is running in the background mode.+ z* K' S& t( {
Process ID = 156681 E5 ^& o1 m# F& p( h0 U' o. U
/ \# ~: Z# `+ N) K3 P這樣資料庫就啟動了,您可以參考DBMaker的其他手冊,使用其他工具來操作這個資料庫;(有關資料庫服務的埠位、名稱等設定,都記錄在/home/dbmaker/data/dmconfig.ini文檔中,有關此文檔中的相關設定,也請參考DBMaker線上手冊)。0 S, F) |: R7 I$ p% F
在安裝完DBMaker後,應該就可以在/home/dbmaker/4.2/lib/so中,找到DBMaker的odbc native driver。
; O: d4 g8 j6 @- v+ B
% _& `6 }& e2 E- o7 I1 K- m* I[dbmaker@support bin]$ ls /home/dbmaker/4.2/lib/so/
# k& y: b' Y0 T' _! ~libdmapic.so libdmjdbc42.so libdmxtt.so libiconv.so.2.2.0
% H+ ?7 v. y% c# X/ klibdmapis.so libdmjsvrut.so libexpat.so libxerces-c.so- t' f5 H3 v/ d2 Y: v
libdmdttut.so libdmudf.so libiconv.so libxerces-c.so.21
, k% ]: |3 K6 n4 Slibdmjdbaut.so libdmxtm.so libiconv.so.2 libxerces-c.so.21.0* n0 J' V6 f3 ^$ j
1 h5 E# T2 _* R/ i其中的dmapic.so,便是DBMaker的native driver;由於DBMaker在開發之初,便是使用ODBC的開發介面,所以DBMaker的Native Driver,便是一符合ODBC API標準的Native Driver;而不像有些資料庫廠商,事實上還是需要另一層薄薄的轉換接口,才能將ODBC API轉成實際的Native Driver API。) x z1 {( u5 [9 J5 F2 A( {8 R0 ~
& \. a1 `+ ^! d安裝unixODBC
3 `" l6 c; z# D% v, R2 m( f接下來談到本文的主角-unixODBC,由於多數人已習慣RedHat的rpm安裝方式,故本文會使用rpm來安裝,至於若要自行build者,請參閱unixODBC的官方網站。
, ?5 h. E% B6 S* w4 I5 Y0 q; ^首先至官方網站中取得最新的unixODBC package,本文使用的是2.2.3-6的版本。$ M# q0 _) A6 c5 M; r
接著,我們使用rpm將unixODBC安裝上去:
4 \ n3 ]6 ?( l" ?8 e E7 E. ?6 z! G8 v2 c% q5 z k' p6 z8 O9 F
[root@support tmp]# rpm -ihv unixODBC-2.2.3-6.i386.rpm . _2 z0 G' V6 ?4 E7 a' x% Z
warning: unixODBC-2.2.3-6.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e( f Z% h: n' u+ I2 H+ W& c; i
Preparing... ########################################### [100%]
1 A4 [% T$ P5 }' F( ^6 k @. I[root@support RPMS]# rpm -ql unixODBC|more<==檢查一下到底安裝了那些檔案!3 b; P. C/ @' e0 \. H. T, R$ I, x
/etc/odbc.ini <==這是安裝DSN的檔案,本文的重點
1 Z. J- H2 M7 R* k/etc/odbcinst.ini <==這是Driver Manager所放置的Driver設定區,亦為本文重點
" W9 A* q. t& K: K# s/usr/bin/dltest
! O- Z1 g( x8 A$ m/ p d( V/usr/bin/isql/ K' `4 V. U, p, m# |
/usr/bin/iusql: S9 N5 y% q3 D) k, o9 J. P
/usr/bin/odbcinst
0 ?; ] i3 V. j. _, m! |/usr/bin/odbctest6 p6 b: j7 t* C9 |% @4 l1 ^+ v
/usr/lib/libboundparam.so.1$ ]' \( n `4 `/ S! s
/usr/lib/libboundparam.so.1.0.02 f) z+ k: l( ~: O5 M
/usr/lib/libesoobS.so.10 H1 K6 m5 M/ H; L* N s
/usr/lib/libesoobS.so.1.0.0
$ @3 b6 U, e9 ?" j: s/usr/lib/libgtrtst.so.13 [* o5 Z v+ [0 s
/usr/lib/libgtrtst.so.1.0.00 u5 r e8 f4 `& L/ q- ]
/usr/lib/libnn.so.14 ]( u* t3 |% W) D d3 v8 {
/usr/lib/libnn.so.1.0.03 j% _" I- L9 G0 @7 H& a
/usr/lib/libodbc.so
6 W: S) u9 P/ R/usr/lib/libodbc.so.1
' o- N0 B* G# p' y3 G, c$ S5 \/usr/lib/libodbc.so.1.0.0
9 l8 h8 e$ w* o: h0 v6 e............
8 w0 ` O5 ^4 v2 ]0 j5 C4 A- {8 S) Y9 E/ R0 @% T" w
S0 ~6 u2 ?, f: |. V4 X. _
! t7 {% y0 L7 q X設定unixODBC連接DBMaker 4.2
( z/ E1 m: T$ y4 ?0 s! {, H( j A如上所述,我們接下來就是要將unixODBC與DBMaker的Driver串接在一起,如同在Windows上,去設定Driver Manager一樣。) p/ S8 C: h6 a x% ?5 j9 S
1 o- F( j' Y5 W' s/ |% i/ {設定Driver4 e! L) @- ^; j4 F. L
在Windows的Driver Manager中,我們所使用的Driver,事實上也是需先向Driver Manager登記的,這個動作由於多數是由資料庫廠商的安裝程式作掉,所以User可能完全不知覺。" ~4 x3 Y0 B. j/ a* x
但在unixODBC中,則必須由使用者自己來進行註冊Driver的動作,這個登錄的動作,即是要在/etc/odbcinst.ini中加上DBMaker相關Driver的資訊,我們首先打開這個檔案,並加上下面的幾行:" o6 _* J' c6 E v5 Z1 |
% y' q! q! s) q, a4 k X7 y5 e4 }1 m[root@support RPMS]# more /etc/odbcinst.ini1 {7 t, p7 X9 t8 S9 R2 |% J2 c+ p" ?
# Example driver definitinions
* F+ G, L& j' j4 K, p#
/ Z6 @4 f0 z& H* B1 x' w& w$ S#
% M9 |/ Q5 V/ o! K# B/ o4 i% k6 N( t9 F. F
# Included in the unixODBC package
$ ^/ v8 _: Q( |[PostgreSQL]& g. E$ |0 n. t+ ]! D! y1 [
Description = ODBC for PostgreSQL1 p/ }& ^) G U% Z
Driver = /usr/lib/libodbcpsql.so" A; J5 G- B! t' W1 w1 J
Setup = /usr/lib/libodbcpsqlS.so
G: Z4 [, _+ A" ?" |FileUsage = 1
" m0 g1 U9 l( |! m4 y6 o* w....; X! U$ m7 M9 Q7 |; N
[DBMaker 4.2 Driver] <==這就是您向unixODBC註冊的Driver名稱,可自行定義
" P0 c- K% i# k4 g$ |0 sDescription = ODBC for DBMaker 4.2( {% I8 a% s1 {( u; f* \3 m& T
Driver = /home/dbmaker/4.2/lib/so/libdmapic.so <==必須登記您環境中,DBMaker所使用的Driver完整路徑
! k: g9 _& R8 I, F#Setup = /usr/lib/libodbcdbmakerS.so! |9 O' o( N5 Z5 M
FileUsage = 0
& i" [$ p. n/ \7 U2 N8 g4 S( Z5 P. {8 ]4 ^, b$ T
2 f4 N9 V0 } H, M6 e3 a9 f
在設定Windows的Driver Manager時,在加上一個新的DSN時,資料庫廠商通常都提供一個安裝程式,讓使用者可以登記如Server位置、Port Number、須要使用什麼認證…等等。這個畫面就是上述的「Setup」,由於DBMaker目前在unixODBC中並未提供安裝畫面,故須暫時將它關閉;待之後的版本提供後,再把它開啟。9 H( V3 ~9 H" [9 {' i
$ M+ y, Y( \8 Y, l
設定ODBC DSN( A5 g6 F, L: w0 R
接下來便是設定Data Source Name了(DSN),在Windows時,有所謂的System DSN及User DSN,其實主要的差別便是System DSN是可為所有User所存取,而User DSN則只能為某特定user存取;當login成另一位user時,便看不到原來User登錄的DSN了!9 f- l! s4 [: t. t, \& V7 ~7 ]
而在unixODBC中,則是使用不同位置的檔案,來存放System DSN及User DSN,在我們的環境中,System DSN會放在/etc/odbc.ini,而User DSN則會放在個別User的家目錄/.odbc.ini。 c* V; D- L, E6 t! Q
由於我們要使用Web的PHP來連接DBMaker,所以要設定System DSN,以下是我們所放置的內容:
& g9 H- r" d2 @/ d# J* Z* `# i; X$ S$ N. I! |) Z& Z* G
[dbsample4]
, b: M! n( X2 hDescription = Database for dbsample4- k) F7 B* I' K+ x" r( g
Driver = DBMaker 4.2 Driver <==注意,此處須與之前Driver設定的名稱相同$ k4 M% c8 b' o" ]
Database = dbsample4 <== 資料庫名稱( L* x I+ W1 o/ e9 K0 e& a" N3 @
Host = localhost <== server所在位置
( Z" x5 U: U6 [1 l6 ]4 CPort = 2450 <== 埠位置
: e; { f! X, @# VUser = SYSADM <==使用名稱(DBMaker預設所使用的管理者名稱)/ O, @9 ?4 g6 \3 e# w
Password = <==使用密碼 (DBMaker預設所使用的管理者密碼)
2 b/ W4 p2 D# `, Z* d( ~! F( v當然您可以使用不同的帳號/密碼登入,但此處為方便,使用DBMaker所預設建立的管理者帳號SYSADM,及預設的密碼(空白)
4 j I! h8 n+ u5 O8 P4 U9 d7 N& a) f% p
測試連接
0 {& u) `$ u! a D# ?6 i2 k7 {接下來,我們使用unixODBC所附的isql來連接dbsample4的資料庫,isql的標準語法為:
: ] c/ O. \. {" d }' |: G: B* \* C8 u2 }) R: r# Z, O
isql DSN [UID [PWD]] [options]0 s9 E! S- q& `5 F& _
我們直接用下方命令來連接資料庫:2 [- s% M( f! D- a& ?, u9 W+ Y! p
1 w a. S3 J" n, M: k[root@support RPMS]# isql dbsample4 sysadm
# j2 H( e8 Y( y$ \
) n: a4 S! |- b, E& z6 H+---------------------------------------+
9 j# m5 w! N" a2 g) h3 U$ e% O
( a6 W" N5 U! \* H7 b| Connected! |
1 b4 w$ s; d/ p+ t2 J8 G% c' _$ B$ y8 w7 a& U" I2 }2 A a
| |
4 S5 e, P1 n5 @3 w7 m
3 q# c/ M( s7 ]* k+ k' g7 X| sql-statement |
$ Z' S/ ^( }' |0 `
$ U" P5 x- n7 j, ]| help [tablename] |
% O" E- V; E4 S* [7 S
5 i3 e! h& _. Q% {; y- v| quit |6 t# w0 _8 D3 `" n0 C
+ b G; A |0 @% O4 n| |# }/ a0 @9 z. L
% ]5 L. ?" r2 L# Y8 S9 g
+---------------------------------------+! D0 F8 f/ J; P2 Y7 W
2 R7 U: |* I F
SQL> select * from SYSTABLE;
+ Y+ o0 H' g: W3 |0 K" G. S3 u5 P% F+ E
.......
- t9 f" i4 T6 Q/ I) s+ W0 H2 Q; r1 J1 C, o) N
; C- k/ N' y: W4 K; d. X& s4 _這樣便可確認我們的確能從unixODBC中,正確連接到DBMaker sample4的資料庫!
2 N0 d# i5 M, S1 X4 b% D) x- b6 S/ c" z7 s; r# o6 ~
PHP+unixODBC+DBMaker3 j1 a5 I; [+ L
現在我們能用unixODBC來連接DBMaker了,剩下來的工作就簡單多了,首先我們先確認我們的php是能夠呼叫odbc function的,先用測試程式看看php是否包含了odbc呼叫:
; Q2 Y0 G) n) ^; Y8 n=>存成phptest.php! g' }" ]' G& T- R5 i. i
然後在Browser底下,查閱Configure Command,是否有--with-unixODBC=shared的文字!
& ^! D) Y$ h6 l: ?接著再查閱網頁中的ODBC該節,是否顯示ODBC Library為unixODBC!
4 Z o- B7 N! O7 C若是以上都無誤的話,您可以撰寫以下的程式php_odbc.php:
1 _+ r9 @& {8 z* V; e2 f1 X* t8 w
% @" M! K, `( z4 h7 U很有可能(最少筆者就碰到),此時卻顯示了無法認識odbc function call;這個問題在筆者這邊碰到時,先查了一下php裝設了那些rpm,後來便發現少裝了php-odbc這個套件,不知道是不是Distribution的問題(筆者裝的是RedHat 9.0)。當正確安裝了 php-odbc-4.2.2-17.i386.rpm後,再執行上述程式,便沒有發現錯誤了!
! O1 U/ J7 X, @4 [有關php的設定及它與apache的設定,網站上另有一篇專文,請自行參閱。
7 N; P# R4 F8 C6 [至此已經大功告成,user可以自行撰寫幾個簡單的測試程式,測試看看是否可以正確使用DBMaker,開始撰寫自己的網頁囉~
' Z$ g1 X5 y3 X2 A( z- u1 J) O j0 C* C5 j& M6 \% L) l' o
結語
9 Q$ v1 u. P L使用至今,我們發現unixODBC至少提供了幾個好處:% r+ Z8 f! R9 a2 a
提供了Logical DSN對應到實體的Database Name
3 ~. ?* m7 d/ p" N; J可同時連接不同版本的DBMaker : K6 _5 F* U, k- I1 ]8 T0 \+ [
, ?1 S0 E4 l- I7 S6 j+ @0 F _
提供了邏輯與實體資料庫的轉換
2 k! ]# f& _, \這也是為何Windows ODBC Driver Manager為何歷久不衰的原因;透過odbc.ini的設定,將邏輯的資料庫名稱,對應到實際的driver及database name。這樣的設定,也一併解決了下面要說的版本問題0 G/ ^' |3 N+ U5 e! e/ `1 O
w& ?3 g/ F/ Z8 ?連接不同版本的DBMaker6 e4 B4 B) c! X' }" ]6 T, _
這是筆者最喜歡的一點!在早期build PHP時,必須要使用下面的方式來生成:3 o7 I2 s6 _3 j' m# ^4 m i
./configure --with-apxs=/usr/sbin/apxs --with-dbmaker=/home/dbmaker/4.2 --enable-track-vars
# i: s8 f" d& Y. P在這樣的設定中,其實已經把DBMaker的版本給設死在面,所build出來的libphp4.so,就是已經設死成只能連接DBMaker 4.2版本。
0 d: E x. ~9 a4 X1 J若是今天想寫一支php程式能同時連接3.7及4.2時,那要怎麼辦呢?這就慘了,因為在這樣的架構下,是沒有辦法作到的。3 h c/ y* f% C. V! Q3 ]
所以筆者有些機械的php就固定只能連3.7,有些機械就是放4.0;若要跨兩個版本的Database,就只能靠別的方法了。
% r ^& y, @: `3 R/ ^- ?但unixODBC提供了這一層轉換方式,讓libphp4.so不是設死只能連DBMaker 4.2,而是能動態存取外在的ini檔案後,再去連接DBMaker不同版本的so。這樣一來,筆者就能在同一支程式,靠著不同版本在odbc.ini中的設定,而能同時存取了!
. \) x1 s5 ?! ]6 z! }& p' T& G2 g+ p7 R2 I# }# n; h
更多的應用
( M9 {9 j- I y0 ]目前unixODBC已逐漸廣為人所接受,不單PHP,包括Perl、Python甚至Java-ODBC Bridge都能使用。如此一來,所有的資料源都可以集中交由unixODBC來管理,這個發展過程,在Windows Driver Manager發展之時也都有過,而它顯而易見的好處,造成了Driver Manager及ODBC的風行!而也希望透過這篇文章,幫助使用者瞭解它,學習它,使用它,最後能真正地喜歡它!
|