|
管理員
  
|
1#
大 中
小 發表於 2009-6-10 01:48 PM 只看該作者
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker 3 |1 c4 y; s. i& y' s3 e* X
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker " J, p+ `! T7 o, u
目錄
% y* U% U- V0 c8 X8 ^' S1 如何在Linux上安裝 unixODBC + DBMaker
( Y& ^5 C) O8 R6 P# P: u% ~: m. F0 T# s
2 unixODBC介紹 Y/ W% p* P! Q( H) W
$ C) q8 L& W0 ]9 X0 z5 M
3 DBMaker簡介
5 k+ a5 ?3 c$ u0 ?- ^, m( D$ S$ x3.1 DBMaker在Linux上的安裝9 C% P) ~# n2 V$ @0 M5 ]
3.2 下載DBMaker 4.25 K( {, k# Q, [
3.3 安裝DBMaker
- \% I$ ]0 [7 B- s% {3.4 檢視安裝後的環境: R/ y5 U, p* u" l
6 L# I% M) E1 w6 J4 u0 m4 安裝unixODBC
2 j, U3 j# A1 M, a- g5 b; O) C8 S0 y! ~4.1 設定unixODBC連接DBMaker 4.2; f9 U! d- N( y0 {* f
4.1.1 設定Driver
7 U) k5 W5 L! X! o 4.1.2 設定ODBC DSN
3 k) z* Q: p3 _& Q3 d! g# ` 4.1.3 測試連接+ Z, g3 M* d' t N) l. y" h
4.2 PHP+unixODBC+DBMaker
1 J9 g5 L5 h. f9 N5 A3 A. U' `' O
1 D1 F* v P& b2 C M+ l4 V" Y5 結語& E" j: t4 P( \4 ^0 g) R3 n
5.1 提供了邏輯與實體資料庫的轉換! I8 x9 p; i+ Z0 y% }
5.2 連接不同版本的DBMaker
! h# d0 O, x7 q# B9 K0 N5.3 更多的應用
; Z2 B; h: [$ R, S! r. `) W
- k% }* |7 t. Q) {% R+ N; @ m/ k& C( X
如何在Linux上安裝 unixODBC + DBMaker
: j* g! b( K2 R' _0 X/ l在Windows中相當好用的ODBC Driver Manager,在Linux中卻一直沒有相同的設定;而現在Linux也有了類似的unixODBC了!在本文中,除了介紹unixODBC的設定外,也會介紹如何透過PHP去連接DBMaker資料庫,及使用unixODBC所帶來的好處。 ! S8 H" _2 ?. Y7 I; c! U
0 \3 I% M" g1 @1 ~
) r; m0 F8 u+ g8 ]0 p% ^5 F9 v6 s# ~' @9 D; c
/ O7 {1 S- Z9 X2 R5 t. runixODBC介紹
" u+ g( X% n3 \& K, ~( cODBC(Open DataBase Connectivity)是一個跨平台的標準介面,從1990年代開始推行以來,一直廣為業界所使用,即使如今有ADO或JDBC等新的標準,在業界中卻仍時常見到這種界面。即是因為推廣的時間久及開放式的架構,讓用戶已經習慣且易於去使用它了。
}2 I; p; P' ~) i
7 I" s$ k% o! N5 v在Windows中,透過ODBC Driver Manager,各家資料庫可個自保留自己的Native Driver,然後使用一層轉接接口,將相對應的ODBC Call轉化成自己的Native API Call;但在User的角度而言,這兩者在外觀上是完全相同的,而各家資料庫則需負責將標準的ODBC Call,轉換成自己獨特的Native Call。
6 F4 @9 N0 u$ r0 _/ P7 p1 X
* }) }5 j% [' H& J這樣的使用方式,讓ODBC在推出不久,即廣為用戶所接受,User也都習慣在ODBC Driver Manager中註冊自己的Driver,及設定相關的DSN(Data Source Name)。 ! [1 H- J# e9 Y+ x% }$ q
+ V8 h+ q& `/ y. b9 Q6 T! e
這樣方便的設計,在Linux中,卻一直欠缺相同的機制;使得當要使用各式語言去連接資料庫時,便得依該語言的特性去重build一版可呼叫Native Call的模組(module),而一旦Build完後,若當中需要一些變動(如版本昇級),常常就要重build一次,這樣的設計使得Linux在使用資料庫時,極為不便!!
: c: B! C" F# Q& E" b' @" S# w& W" u( Y2 q- o; R" M2 u5 k
有鑑於此,便有一unixODBC的組織嚐試在Linux底下,建立類似ODBC Driver Manager的機制。此一機制與ODBC Driver Manager的功能相仿,便是要能提供Runtime的動態變換功能,讓AP可以透過ODBC Driver Manager,動態地載入不同的資料庫Driver,透過這樣的方式去連接資料庫。
- B4 _2 E) Y! @5 V. `% \2 x' N7 z! K1 \) f9 D
如今,許多Distribution廠商都已經將unixODBC列為標準安裝的套件,而愈來愈廣為人知,本文即是要安裝unixODBC,並利用PHP去連接DBMaker 4.2資料庫,並由此來看看使用unixODBC所帶來的方便性。有關unixODBC的其他說明,請參閱官方網站。
" Q) \# S- w0 ?( ]& x: }5 _ O: x6 \; d7 q4 R7 a7 D' f
DBMaker簡介- U$ l# K& Z/ O
DBMaker為一跨平台的大型關聯式資料庫,符合SQL 99標準,擁有開放式架構,在處理多媒體、全文檢索上擁有強大的搜尋性能;有關DBMaker Engine部份的介紹,請參閱DBMaker的其他相關文章,本文不再贅述,而只著重在使用unixODBC方式的介紹。 . \! W) y8 P; C+ |& ^
% f& B' r! D" Y, |: c$ _. v首先DBMaker是一跨平台的大型資料庫,故在Windows、Linux上的安裝與使用幾乎是一致的。若您尚未使用過DBMaker,我們簡單介紹如何在Linux上安裝DBMaker,與其他資料庫相較,您會發現在Linux安裝DBMaker是一件相當輕鬆愉快的工作。 9 c" |% Z6 w: z1 @
2 `/ V4 y: G/ M8 ~' r
DBMaker在Linux上的安裝
( o3 N0 y& r; y& z& `5 ?" t加入dbmaker的user 首先您須在Linux底下,加入dbmaker這個user,不要忘記請一併將密碼設定好:
7 H& N; R! f2 P; z! d, Q* b
% S9 e# e6 X2 y4 B
7 z1 ?; Z8 I' A1 h# i* l[root@support root]# adduser dbmaker
0 x7 Z, J8 H: n' j[root@support root]# passwd dbmaker( T& `& b4 z/ T( J5 n/ C9 ^/ \/ C
Changing password for user dbmaker.
& ?. R3 {0 P; |# d1 E8 u E# RNew password:
2 p& f0 z7 L5 Z# P: o) }1 `Retype new password: / @: z1 _. e" n: Z
passwd: all authentication tokens updated successfully.7 _8 k5 ]. @3 C* J- i+ k2 |
3 x$ ~- K# B' Y" E; l
一般說來,除非另行指定,否則dbmaker的家目錄會放在/home/dbmaker底下。 2 B* l0 j1 i7 x( O, l3 W6 L
9 s! R3 T& O) W- M/ `. b下載DBMaker 4.27 d8 |0 o i9 e
接下來,請至DBMaker的官方網站下載區,去下載最新的DBMaker 4.2版本,將其放在適當的地方。(本文將其放置在/tmp底下)
* N B0 e! ~' f+ p
4 ~/ Z4 Q+ t4 y6 W[root@support tmp]# pwd
8 w/ @" R0 W' f/tmp! D: d# x* j# u2 C* W! n v
[root@support tmp]# ls -al dbm*
! A& h S" _( H# L) [-rwxr--r-- 1 alen alen 34649895 11§ 23 14:48 dbmaker-4.2.0-Linux2.x86.tar.gz
* a: |" V0 j- ^. Y4 f2 E[root@support tmp]# tar zxvof dbmaker-4.2.0-Linux2.x86.tar.gz <==解壓縮
$ B' I/ O+ G3 B( F/ u1 t7 \. Rdm420.tar3 f/ I- H' e% k. s
setup
/ c3 e* b1 K( C: P
$ _8 G, O% F* y) C$ g1 l8 s安裝DBMaker( |5 t0 O' x6 Z( T3 p
接下來,請切換至dbmaker這個user,並執行setup程式,為了能正確執行setup,請將setup程式改變模式成「可執行」。 % M, u/ v2 N0 J4 m
: P0 R" n! b, {% _& S h C
$ t( P0 Z# z% U' o# ?1 Y$ _[root@support tmp]# chmod a+x setup <==切換成可執行8 K6 r; u" V+ z$ P
[root@support tmp]# su dbmaker <==切換成dbmaker後,進行安裝
! d m/ Z1 ^. Y! R l7 m4 v[dbmaker@support tmp]$ ./setup0 |' C6 g: i% t1 b( n1 {) v. v
# W, B" h5 d9 A6 e
+ V1 j& ~2 ^" B+ {
==============================================================
3 j5 _$ v( ~' }. nDBMaker Database Management System Installation, ^; }4 d8 Y: K$ r, m$ P3 }& Z
For DBMaker Release 4.2.0' I. a" ~" h- }, E" V
Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved.
; ^6 I* E0 l9 d) d9 p, {8 E==============================================================) n: H; f* T+ t
Install Components:
7 A" l: z# C. L6 [[A] DBMaker Server .............. (yes) Language: [ Western, Big5 ]8 y+ [3 d6 ^4 |; y" O1 U. J* w$ _
[B] DBMaker Client ............... (yes)* P7 |' U. F4 t! S+ [, Y1 W
[C] Sample Programs............... (yes)
, p1 M3 {& p# q0 U7 k[D] Tutorial Database.............. (no)8 d% Z: ^0 ^ n
[E] Documentation ................. (no), h G* X; ~ C, @) g! h, K7 t& v
Install Path:
, L$ Z! @/ r4 v% a* f2 _DBMaker Home directory: /home/dbmaker( B9 [- K" [0 z' @' m' G) T
[Y] Start Install [N] Quit
* C) e- W5 B& g, b& yPlease press [ A B C D E Y N ] Y <==為簡單計,請直接使用「Y」進行安裝8 U7 D$ _) Q M8 o0 ]5 D
( ?" L. m3 {' ]" \. M0 m當您按下Start Install後,DBMaker就開始安裝,約1-3分鐘內,安裝便可完成,可說是又快速、又方便呢!
$ e0 w1 Z$ `$ R! D+ t2 N3 n- s. P9 j1 R" B; q$ M
檢視安裝後的環境
' U4 Q+ L! A% S2 G+ m在上述安裝完DBMaker後,DBMaker會自動產生一個範例資料庫-DBSample4,我們可以用下面的方法來啟動這個資料庫:
' S/ {" a% O7 u: R4 b9 G$ T f7 J7 N
7 ?& A% I5 R; o" j--------------------------------------------------------------------------------3 J, H9 s1 y7 J+ x
[dbmaker@support bin]$ cd /home/dbmaker/4.2/bin <=切換至命令目錄,注意此時使用的user為dbmaker!
; q' [: n V2 Z( f' K! m[dbmaker@support bin]$ ./dmserver dbsample4 <= 使用此命令來啟動資料庫
: z% |2 L+ H. t* z2 K! ^# G2 jDBMaker 4.2.0 (#4721, 20040924)8 e* m; D9 S! U1 C* \
Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved.
8 |7 ]% }0 [5 s' tSQL Server bound to port 2450 <==已在埠位2450上準備接收request& T' X9 g$ c0 q+ X, L
Database Server is running in the background mode.* E) {: U, E6 g& m9 N
Process ID = 15668
& p. p8 y9 c( ~" j, W3 _, Y& H1 w+ l. Y7 h+ n
這樣資料庫就啟動了,您可以參考DBMaker的其他手冊,使用其他工具來操作這個資料庫;(有關資料庫服務的埠位、名稱等設定,都記錄在/home/dbmaker/data/dmconfig.ini文檔中,有關此文檔中的相關設定,也請參考DBMaker線上手冊)。
8 }. Y: ?% X2 K在安裝完DBMaker後,應該就可以在/home/dbmaker/4.2/lib/so中,找到DBMaker的odbc native driver。
# U- x7 q4 U$ \4 u7 ~3 R2 |* B( F: J; E6 K( i5 v& R0 J: k
[dbmaker@support bin]$ ls /home/dbmaker/4.2/lib/so/
: r9 t) ~2 K9 p2 {libdmapic.so libdmjdbc42.so libdmxtt.so libiconv.so.2.2.0
6 m* h0 J. N7 l J7 F' Clibdmapis.so libdmjsvrut.so libexpat.so libxerces-c.so
* ~ I& O4 Y2 H" h; I* j [! w# Olibdmdttut.so libdmudf.so libiconv.so libxerces-c.so.21
) o9 _! W& X. A+ T* F9 Slibdmjdbaut.so libdmxtm.so libiconv.so.2 libxerces-c.so.21.0
* O1 q- z+ w. H s" ~# h: d9 F* u0 x* k' I5 j8 v. p0 o: W
其中的dmapic.so,便是DBMaker的native driver;由於DBMaker在開發之初,便是使用ODBC的開發介面,所以DBMaker的Native Driver,便是一符合ODBC API標準的Native Driver;而不像有些資料庫廠商,事實上還是需要另一層薄薄的轉換接口,才能將ODBC API轉成實際的Native Driver API。( \" |+ m3 X+ @1 U* Y
& T: y; B9 ]% y; ^
安裝unixODBC
8 ^6 g9 P% J) k; V6 c接下來談到本文的主角-unixODBC,由於多數人已習慣RedHat的rpm安裝方式,故本文會使用rpm來安裝,至於若要自行build者,請參閱unixODBC的官方網站。
) @7 D! @! p* r( x7 [+ i$ j首先至官方網站中取得最新的unixODBC package,本文使用的是2.2.3-6的版本。2 a/ S3 c4 O+ f1 @
接著,我們使用rpm將unixODBC安裝上去:1 {0 ~1 g2 o% J3 J
3 [$ B9 r, x* N* Z }[root@support tmp]# rpm -ihv unixODBC-2.2.3-6.i386.rpm
8 J' r E. U& T3 G9 V4 owarning: unixODBC-2.2.3-6.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e- Y+ {! g! i" f3 c4 r
Preparing... ########################################### [100%]
) b/ T2 |+ o/ g3 |$ g% Y[root@support RPMS]# rpm -ql unixODBC|more<==檢查一下到底安裝了那些檔案!
: L0 U) {; w, x/ x6 e/etc/odbc.ini <==這是安裝DSN的檔案,本文的重點
9 ~0 w' m M* N" Q/ r# b3 C/etc/odbcinst.ini <==這是Driver Manager所放置的Driver設定區,亦為本文重點
: {8 G1 F& I8 u: m, ]/usr/bin/dltest8 l2 u* R; D( r4 u3 N* S$ r
/usr/bin/isql
! W+ y4 \. F4 ]2 q. ]/usr/bin/iusql W3 d2 I" ^2 W" ~" N/ K- T2 Q
/usr/bin/odbcinst
' j7 \( F9 c! U" `1 |; E3 ]/usr/bin/odbctest
' b& r0 I+ ~/ G9 Q/ h/usr/lib/libboundparam.so.1
6 n0 k0 Y0 a) j+ D8 O, J/usr/lib/libboundparam.so.1.0.0
/ n9 g* T/ b& P* M0 C/usr/lib/libesoobS.so.1
: S: V2 V. x: z7 D! T- s5 n. G2 ?1 ]/usr/lib/libesoobS.so.1.0.0
+ P" @6 n. ] S% S7 k s8 B5 y/usr/lib/libgtrtst.so.16 W7 n6 T( `' k* A5 ^4 N8 | U
/usr/lib/libgtrtst.so.1.0.01 i, S) w' n3 ]3 c5 S
/usr/lib/libnn.so.1
9 {5 ^) n& E ]; }0 g4 F/usr/lib/libnn.so.1.0.0 g- z9 e- x/ I( q% L' d
/usr/lib/libodbc.so
( ?% K/ k( J: v/usr/lib/libodbc.so.1
/ V9 F% `5 @7 g% F. ~0 Z; o6 _) E1 e/usr/lib/libodbc.so.1.0.0
' s, b2 j" F2 [/ I, M# G# T............
& ]; U" a* C8 V3 Q( P2 ^
: H0 l6 O' a6 @1 O
9 a! i$ \( f- `3 C+ Q& ?& l/ N: l) S
設定unixODBC連接DBMaker 4.2; k" z5 N! `" b# {8 f: i! V
如上所述,我們接下來就是要將unixODBC與DBMaker的Driver串接在一起,如同在Windows上,去設定Driver Manager一樣。0 n2 _* C8 w g8 d) d; M, ?, u. z: T
+ q/ k3 h$ a0 L6 Z0 }. y設定Driver
. |, ^5 Z! h+ Y0 j3 f在Windows的Driver Manager中,我們所使用的Driver,事實上也是需先向Driver Manager登記的,這個動作由於多數是由資料庫廠商的安裝程式作掉,所以User可能完全不知覺。
3 H4 ]2 f% C6 b) C. E( ?但在unixODBC中,則必須由使用者自己來進行註冊Driver的動作,這個登錄的動作,即是要在/etc/odbcinst.ini中加上DBMaker相關Driver的資訊,我們首先打開這個檔案,並加上下面的幾行:
! k$ [) n" |) T( ?) x" d- ~: k- W( e3 i7 W. m
[root@support RPMS]# more /etc/odbcinst.ini
* i- n6 O0 E$ k' T. i# Example driver definitinions
3 F) Z4 k+ |$ R; G6 F3 l4 b7 v7 _#
" C8 t( a. z* c; H; V#1 f3 g/ m( F; c5 z: K O& h
5 }, e3 v, x' o6 e% M3 a/ _# Included in the unixODBC package
) }* E9 g0 d. C& H[PostgreSQL]* N: P3 X# o1 I! l6 _& f5 h
Description = ODBC for PostgreSQL
! F+ F7 v( w# w0 R/ cDriver = /usr/lib/libodbcpsql.so
. ?$ x9 u) V- {9 mSetup = /usr/lib/libodbcpsqlS.so7 o" |; U9 a' R) m5 U
FileUsage = 1
7 ~/ p7 E; J4 M. v1 @, j% p! c....
- W# Q2 H6 V8 m: U* @[DBMaker 4.2 Driver] <==這就是您向unixODBC註冊的Driver名稱,可自行定義
9 K6 I* f1 Q# k7 S' t& K. o, vDescription = ODBC for DBMaker 4.2
& W( o0 J2 I" NDriver = /home/dbmaker/4.2/lib/so/libdmapic.so <==必須登記您環境中,DBMaker所使用的Driver完整路徑
2 f. s$ u( Z& ? h/ D7 `#Setup = /usr/lib/libodbcdbmakerS.so
/ L& D5 w% z4 G" m$ | UFileUsage = 0
" `* E& l6 F( D# z; |
; ~2 D' @: N' a8 V- x# f/ E: s* P
在設定Windows的Driver Manager時,在加上一個新的DSN時,資料庫廠商通常都提供一個安裝程式,讓使用者可以登記如Server位置、Port Number、須要使用什麼認證…等等。這個畫面就是上述的「Setup」,由於DBMaker目前在unixODBC中並未提供安裝畫面,故須暫時將它關閉;待之後的版本提供後,再把它開啟。
. [6 [. }8 t7 O% U5 X {7 w0 z7 w" v6 F3 I+ h% @; w4 f
設定ODBC DSN
. F. a. D- V1 S/ X接下來便是設定Data Source Name了(DSN),在Windows時,有所謂的System DSN及User DSN,其實主要的差別便是System DSN是可為所有User所存取,而User DSN則只能為某特定user存取;當login成另一位user時,便看不到原來User登錄的DSN了!1 g1 g& z E0 h9 U2 J, B, d
而在unixODBC中,則是使用不同位置的檔案,來存放System DSN及User DSN,在我們的環境中,System DSN會放在/etc/odbc.ini,而User DSN則會放在個別User的家目錄/.odbc.ini。 |! B) D* j, w% R
由於我們要使用Web的PHP來連接DBMaker,所以要設定System DSN,以下是我們所放置的內容:+ `/ ^! j5 k2 O8 J
9 T/ E8 f4 L7 A/ R% g1 c% O) G[dbsample4]) S) J; ~# a6 Z ?3 ^2 l3 l
Description = Database for dbsample4
0 u' v9 D3 v XDriver = DBMaker 4.2 Driver <==注意,此處須與之前Driver設定的名稱相同
+ V! |( o% {; Z8 ~: h4 o/ m: T$ B3 sDatabase = dbsample4 <== 資料庫名稱
' W* G) |' _5 eHost = localhost <== server所在位置4 n9 x0 Q1 f- @" ]$ J9 K8 y% |
Port = 2450 <== 埠位置
# j G+ L5 H2 g( fUser = SYSADM <==使用名稱(DBMaker預設所使用的管理者名稱)+ y, d6 y+ h8 d1 U0 n& N, t: A+ Z
Password = <==使用密碼 (DBMaker預設所使用的管理者密碼)
1 s! T3 }9 `0 e! G* E a B6 z當然您可以使用不同的帳號/密碼登入,但此處為方便,使用DBMaker所預設建立的管理者帳號SYSADM,及預設的密碼(空白)
- ~ F+ l% k/ P" H3 L. K$ y) O) f+ P6 C" P, T: [2 a% |
測試連接1 ?) T; S$ O. J( Y C6 E7 E3 _$ j0 _
接下來,我們使用unixODBC所附的isql來連接dbsample4的資料庫,isql的標準語法為:0 C' G; u+ O# |
% a4 k! x, F% D- y% m" e$ Uisql DSN [UID [PWD]] [options]
! F# n8 P6 C+ j9 l我們直接用下方命令來連接資料庫:
2 e1 }7 I4 N3 l0 F3 k) T$ K
# {# V7 R+ E5 {6 s7 ?7 y[root@support RPMS]# isql dbsample4 sysadm- j9 q! J+ x0 e5 M- Y5 i8 o
S# T: |0 I! h1 n
+---------------------------------------+
5 ]2 i/ y. ^+ e6 ~$ s: T; E6 J, F* G1 l8 V
| Connected! |5 B9 ~- r7 o7 b9 A0 ~1 m: d0 h
. x L0 a# S6 t; G8 B; X9 k: f
| |
; c1 R$ @8 g6 Z2 y1 Q6 @ P: {. C% q$ t" O7 o6 u- w
| sql-statement |
; I$ L9 a4 \* @1 v3 ^. L' U4 x7 T1 ]. R/ N
| help [tablename] |5 Z2 x, p0 r- s
6 b3 P! \- H$ B
| quit |3 L$ ]8 q/ [- S5 M, O) p
. \% Z8 [3 I6 c# I0 e7 O| |
+ E! z& _+ i$ g+ w0 d6 f
% |$ h- Z, o3 P+---------------------------------------+
, l9 |8 E8 Y& n, H% k* e" Q5 {# q, _) \8 h- B
SQL> select * from SYSTABLE;( x1 n8 S! O: J1 v4 H& i8 b
0 d7 }! A4 s: _8 l6 l
.......( H5 j; M! A; g7 x# w$ o
. ]' `1 P6 W9 h% v
. M! p/ Q: X7 l4 P1 R這樣便可確認我們的確能從unixODBC中,正確連接到DBMaker sample4的資料庫!# u8 ?% P3 c j: F" |
/ p% w) I3 O, W' O2 l! _# d
PHP+unixODBC+DBMaker# t, Y6 a2 f) ]/ b
現在我們能用unixODBC來連接DBMaker了,剩下來的工作就簡單多了,首先我們先確認我們的php是能夠呼叫odbc function的,先用測試程式看看php是否包含了odbc呼叫:% n* [9 M s O4 I
=>存成phptest.php
9 V7 ^5 G T S0 W3 Z+ b然後在Browser底下,查閱Configure Command,是否有--with-unixODBC=shared的文字!6 x8 z3 R4 S! w1 V& h( C
接著再查閱網頁中的ODBC該節,是否顯示ODBC Library為unixODBC!
1 b( V$ }/ C6 _: U8 ]$ u1 {若是以上都無誤的話,您可以撰寫以下的程式php_odbc.php:" {& `% Z8 l# {
, O6 [. d. a3 t% R5 ?" M+ T; `很有可能(最少筆者就碰到),此時卻顯示了無法認識odbc function call;這個問題在筆者這邊碰到時,先查了一下php裝設了那些rpm,後來便發現少裝了php-odbc這個套件,不知道是不是Distribution的問題(筆者裝的是RedHat 9.0)。當正確安裝了 php-odbc-4.2.2-17.i386.rpm後,再執行上述程式,便沒有發現錯誤了!- A6 b) V8 {1 [/ @6 u
有關php的設定及它與apache的設定,網站上另有一篇專文,請自行參閱。
t" |. f/ G2 i: I6 S3 }) P7 C. h& H! A至此已經大功告成,user可以自行撰寫幾個簡單的測試程式,測試看看是否可以正確使用DBMaker,開始撰寫自己的網頁囉~% O. d( m3 L, J/ W0 Z4 Z/ u. n0 q0 L# V
0 t1 ]8 U* Z; X+ v
結語
' d6 J$ m4 H7 S, [, a使用至今,我們發現unixODBC至少提供了幾個好處:
I; p" T. S0 I: R4 t3 I- K提供了Logical DSN對應到實體的Database Name
' \7 z( X8 s& `2 Y可同時連接不同版本的DBMaker . D; d0 y; a" Q# T: [
8 R. g0 |1 N5 H, W1 `& C: v# a
提供了邏輯與實體資料庫的轉換, }# C' r `% L
這也是為何Windows ODBC Driver Manager為何歷久不衰的原因;透過odbc.ini的設定,將邏輯的資料庫名稱,對應到實際的driver及database name。這樣的設定,也一併解決了下面要說的版本問題
- G" t1 A+ ?" \$ ?4 I7 M, g `! Z3 |/ M6 o
連接不同版本的DBMaker. [" U! j% x* P$ W( g' N
這是筆者最喜歡的一點!在早期build PHP時,必須要使用下面的方式來生成:
0 e, L3 B; D( C( m, q, D6 L5 |8 a3 p./configure --with-apxs=/usr/sbin/apxs --with-dbmaker=/home/dbmaker/4.2 --enable-track-vars; y0 e% [ E4 c% R: B
在這樣的設定中,其實已經把DBMaker的版本給設死在面,所build出來的libphp4.so,就是已經設死成只能連接DBMaker 4.2版本。+ I5 b7 X. L0 l* P& U; P. K
若是今天想寫一支php程式能同時連接3.7及4.2時,那要怎麼辦呢?這就慘了,因為在這樣的架構下,是沒有辦法作到的。* @- |( h- e/ w7 X w& q9 o
所以筆者有些機械的php就固定只能連3.7,有些機械就是放4.0;若要跨兩個版本的Database,就只能靠別的方法了。* L* D3 m* O9 k( \
但unixODBC提供了這一層轉換方式,讓libphp4.so不是設死只能連DBMaker 4.2,而是能動態存取外在的ini檔案後,再去連接DBMaker不同版本的so。這樣一來,筆者就能在同一支程式,靠著不同版本在odbc.ini中的設定,而能同時存取了!$ S8 i7 f. b' r) w- i
' N/ q6 ^+ m( {2 L5 Y2 o
更多的應用
' m, d( H; y' h9 B目前unixODBC已逐漸廣為人所接受,不單PHP,包括Perl、Python甚至Java-ODBC Bridge都能使用。如此一來,所有的資料源都可以集中交由unixODBC來管理,這個發展過程,在Windows Driver Manager發展之時也都有過,而它顯而易見的好處,造成了Driver Manager及ODBC的風行!而也希望透過這篇文章,幫助使用者瞭解它,學習它,使用它,最後能真正地喜歡它!
|