|
管理員
  
|
1#
大 中
小 發表於 2009-6-10 01:48 PM 顯示全部帖子
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
8 E3 |! j5 \: G& t技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
J0 ~8 ] _6 h8 q* h( Q6 X3 G1 g! Y目錄 8 y% n" v! A6 ~; U- o
1 如何在Linux上安裝 unixODBC + DBMaker
, V! [ i& p2 E& o/ }# z' ~2 f5 _& b
2 unixODBC介紹
( c, m9 t+ x4 X/ R: I- H6 W9 {$ H. K2 {- Z3 F
3 DBMaker簡介
; `9 c$ U& X8 V3.1 DBMaker在Linux上的安裝" O, }0 G; z$ q( S3 T
3.2 下載DBMaker 4.2) b4 {; b4 N+ k# Q
3.3 安裝DBMaker
( e- C! O! g; Q3.4 檢視安裝後的環境
5 v% ^; @! |! b
1 k+ Y4 y7 ^; g4 D4 安裝unixODBC
5 H7 e& ?( Y- b4 P7 c4.1 設定unixODBC連接DBMaker 4.2' k8 w0 \5 E8 ~ O
4.1.1 設定Driver" l: p% _. W# j9 {
4.1.2 設定ODBC DSN
: C4 h& Q7 [3 e+ {0 {! J 4.1.3 測試連接. R2 R. B2 d4 ]* l4 R f
4.2 PHP+unixODBC+DBMaker
6 \6 A: q' I) `, }& C0 U& K
% \$ ~# n- {$ ]& E' y6 k) R! U( h) E5 結語
# {! l. ?' C0 ^7 i8 J5.1 提供了邏輯與實體資料庫的轉換0 o4 r6 e8 e5 ^+ J
5.2 連接不同版本的DBMaker
! T- N& X. j4 j: u4 g9 I. X% z5.3 更多的應用% i' {1 M8 T) p$ U b2 [$ p: ^
$ C7 U* }! k. M8 ? {
, Y1 p- u+ x7 P8 \0 ]5 {6 F$ }1 y如何在Linux上安裝 unixODBC + DBMaker) L( ?5 R' w+ c) [7 s( ~5 @/ H
在Windows中相當好用的ODBC Driver Manager,在Linux中卻一直沒有相同的設定;而現在Linux也有了類似的unixODBC了!在本文中,除了介紹unixODBC的設定外,也會介紹如何透過PHP去連接DBMaker資料庫,及使用unixODBC所帶來的好處。 ) k+ i. I9 C# n1 A3 z# y5 u- t
5 c3 r& b+ i( c0 \9 ?5 U
' d) C: ~- Y8 ^5 ~
+ g; ^: P1 i+ O( r t: `/ T4 n
9 ?' z( U4 j9 z/ _% l/ AunixODBC介紹/ ~0 Z8 w9 Q3 X1 n G; U2 h" y
ODBC(Open DataBase Connectivity)是一個跨平台的標準介面,從1990年代開始推行以來,一直廣為業界所使用,即使如今有ADO或JDBC等新的標準,在業界中卻仍時常見到這種界面。即是因為推廣的時間久及開放式的架構,讓用戶已經習慣且易於去使用它了。
( ^/ T; R s2 ^( ~% O( ^
- z- ^5 y0 |* u在Windows中,透過ODBC Driver Manager,各家資料庫可個自保留自己的Native Driver,然後使用一層轉接接口,將相對應的ODBC Call轉化成自己的Native API Call;但在User的角度而言,這兩者在外觀上是完全相同的,而各家資料庫則需負責將標準的ODBC Call,轉換成自己獨特的Native Call。 $ @" ?' A- w: C0 {2 k
* H/ g# \) r5 ]4 I
這樣的使用方式,讓ODBC在推出不久,即廣為用戶所接受,User也都習慣在ODBC Driver Manager中註冊自己的Driver,及設定相關的DSN(Data Source Name)。 8 p5 o+ _/ q, |" j7 \1 X
' }$ {1 S' o/ K% {" p這樣方便的設計,在Linux中,卻一直欠缺相同的機制;使得當要使用各式語言去連接資料庫時,便得依該語言的特性去重build一版可呼叫Native Call的模組(module),而一旦Build完後,若當中需要一些變動(如版本昇級),常常就要重build一次,這樣的設計使得Linux在使用資料庫時,極為不便!! 0 U T4 _2 z X: f: W2 h \: b8 S
5 H! z, I1 p( x7 d" m$ U J2 D有鑑於此,便有一unixODBC的組織嚐試在Linux底下,建立類似ODBC Driver Manager的機制。此一機制與ODBC Driver Manager的功能相仿,便是要能提供Runtime的動態變換功能,讓AP可以透過ODBC Driver Manager,動態地載入不同的資料庫Driver,透過這樣的方式去連接資料庫。
: g1 p l# `0 ?0 u! c
5 C s: t2 @7 `如今,許多Distribution廠商都已經將unixODBC列為標準安裝的套件,而愈來愈廣為人知,本文即是要安裝unixODBC,並利用PHP去連接DBMaker 4.2資料庫,並由此來看看使用unixODBC所帶來的方便性。有關unixODBC的其他說明,請參閱官方網站。
( o% }( Q+ W* q/ G
' K. c/ ]# x9 C" GDBMaker簡介) {/ N; b% p* l1 a
DBMaker為一跨平台的大型關聯式資料庫,符合SQL 99標準,擁有開放式架構,在處理多媒體、全文檢索上擁有強大的搜尋性能;有關DBMaker Engine部份的介紹,請參閱DBMaker的其他相關文章,本文不再贅述,而只著重在使用unixODBC方式的介紹。 7 W6 c7 } b( c; I. d. u
$ S7 D7 q" ]9 Y/ {/ j0 M7 e
首先DBMaker是一跨平台的大型資料庫,故在Windows、Linux上的安裝與使用幾乎是一致的。若您尚未使用過DBMaker,我們簡單介紹如何在Linux上安裝DBMaker,與其他資料庫相較,您會發現在Linux安裝DBMaker是一件相當輕鬆愉快的工作。
/ R: i4 ]8 r; m& { c' A& b. y \& f
5 x0 d# n: J; g4 z8 MDBMaker在Linux上的安裝) p3 j+ B3 f8 j- P; `
加入dbmaker的user 首先您須在Linux底下,加入dbmaker這個user,不要忘記請一併將密碼設定好:
; C. H, A1 b( y3 N) t. z l$ \6 E" G% _( p! H3 B- i. @
! Z+ a, D: B! s& [# T" k( Z[root@support root]# adduser dbmaker
1 J9 @/ ~; F9 c' A1 R[root@support root]# passwd dbmaker
- Q$ U# ]% P; C7 o6 E4 R' xChanging password for user dbmaker.0 \5 [2 B1 {/ S* z
New password:
7 R: i5 X6 G6 Y) wRetype new password:
o- X/ x# m7 Vpasswd: all authentication tokens updated successfully.+ \0 K/ C; {- |0 b& R+ E+ ~
* V: a- Y" J% u一般說來,除非另行指定,否則dbmaker的家目錄會放在/home/dbmaker底下。
" h* ~, H$ A/ b7 Q/ f4 u) {! W: X F7 f0 j6 V5 X; A# O
下載DBMaker 4.2
+ T+ g" j- G# ]) S接下來,請至DBMaker的官方網站下載區,去下載最新的DBMaker 4.2版本,將其放在適當的地方。(本文將其放置在/tmp底下) b9 e9 ~% u# G, @+ n( d1 P) h
, q- _) r- O. L) U& q' [[root@support tmp]# pwd
% }3 S) p0 s, X! y7 a j* m/tmp
_1 ?, j; P! q[root@support tmp]# ls -al dbm*4 c3 v) a* ]; [
-rwxr--r-- 1 alen alen 34649895 11§ 23 14:48 dbmaker-4.2.0-Linux2.x86.tar.gz
+ K: A/ c- u2 b) q% _0 Y" O6 e. y/ S[root@support tmp]# tar zxvof dbmaker-4.2.0-Linux2.x86.tar.gz <==解壓縮
# `) C% e5 d* B; fdm420.tar
/ j% j; ?/ z% e; x" s0 |& P; Psetup p: }+ ^% I1 F1 V6 c0 b# J
d8 e, q X6 r9 u1 d T8 x2 u! r
安裝DBMaker* Q1 X& P1 N8 L: U, c, y" P6 ?
接下來,請切換至dbmaker這個user,並執行setup程式,為了能正確執行setup,請將setup程式改變模式成「可執行」。 $ P1 {/ H7 v% s1 d
* g4 @- E! u! {- ?9 ~/ m
2 [+ u1 R3 S( e[root@support tmp]# chmod a+x setup <==切換成可執行# C, S' t5 B& u; u
[root@support tmp]# su dbmaker <==切換成dbmaker後,進行安裝
; m: p) M( w. C$ Y) o# }[dbmaker@support tmp]$ ./setup1 N4 ^) k+ E: |4 x/ g) u L5 r7 Q
) W9 q1 q k7 A
$ u& V5 w: T# ]; e6 u% b! P# y
==============================================================; N6 ?2 I9 t' q; p) `
DBMaker Database Management System Installation$ o6 J! g! J6 j3 I
For DBMaker Release 4.2.0
7 H" c3 d* Q# {. ?! e+ bCopyright(C) 1995-2004 CASEMaker Inc. All rights reserved.
! R0 F. O* s5 s) n9 g6 ]# ?==============================================================9 _2 J4 j& H3 {7 `% I- n2 J, m
Install Components:" V; x1 c& E8 U G- h% I
[A] DBMaker Server .............. (yes) Language: [ Western, Big5 ]
: j7 V2 K2 [& {6 [$ L5 a[B] DBMaker Client ............... (yes)' L$ n. O% o; f1 m# x* v& i
[C] Sample Programs............... (yes)1 | O4 i4 j9 t+ M
[D] Tutorial Database.............. (no)3 E2 c( i4 f! Q8 }
[E] Documentation ................. (no)0 n1 ?0 r% i& X
Install Path:
3 N; p4 c4 {% e0 }/ xDBMaker Home directory: /home/dbmaker
; m) j# Q" U- v- m |[Y] Start Install [N] Quit
9 F; d7 O. f8 d8 ?Please press [ A B C D E Y N ] Y <==為簡單計,請直接使用「Y」進行安裝
3 r+ X ?+ i7 v7 R. u8 n% h e) D; I3 p& ?1 G2 a8 e
當您按下Start Install後,DBMaker就開始安裝,約1-3分鐘內,安裝便可完成,可說是又快速、又方便呢!
# u m9 [1 ]+ \- z; G9 ]( x2 E( [1 {9 L @: e
檢視安裝後的環境# I1 d) }0 }' g5 A3 h7 s7 h! u
在上述安裝完DBMaker後,DBMaker會自動產生一個範例資料庫-DBSample4,我們可以用下面的方法來啟動這個資料庫:
8 \4 C9 y5 ?4 G1 }4 @/ Q' V: Y" s4 L+ a% o
--------------------------------------------------------------------------------
0 F8 B+ Z2 W$ R5 `+ l[dbmaker@support bin]$ cd /home/dbmaker/4.2/bin <=切換至命令目錄,注意此時使用的user為dbmaker!, t$ c- ?( E5 a( B- B% F
[dbmaker@support bin]$ ./dmserver dbsample4 <= 使用此命令來啟動資料庫
W! p5 S; d6 e9 C% KDBMaker 4.2.0 (#4721, 20040924)* v# e+ W" u7 E" L' D
Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved.
4 _! L3 f8 e# V" i9 o4 B: nSQL Server bound to port 2450 <==已在埠位2450上準備接收request
9 v. s* `- f* \( F0 X: `8 [Database Server is running in the background mode.
, c3 g x; @- Z( i8 w! q$ K dProcess ID = 15668
, u/ v. z D4 q; q- v+ t r7 p
這樣資料庫就啟動了,您可以參考DBMaker的其他手冊,使用其他工具來操作這個資料庫;(有關資料庫服務的埠位、名稱等設定,都記錄在/home/dbmaker/data/dmconfig.ini文檔中,有關此文檔中的相關設定,也請參考DBMaker線上手冊)。
# F0 R: k; ^& X2 P2 q在安裝完DBMaker後,應該就可以在/home/dbmaker/4.2/lib/so中,找到DBMaker的odbc native driver。
$ N7 V0 ?) t" @! b( @. O; a- X0 |& O0 R, x' `: n' b
[dbmaker@support bin]$ ls /home/dbmaker/4.2/lib/so/! }7 M+ S# j& L
libdmapic.so libdmjdbc42.so libdmxtt.so libiconv.so.2.2.0* s4 T+ l( m: {- c5 t# B A
libdmapis.so libdmjsvrut.so libexpat.so libxerces-c.so
. P/ i( G/ _2 _% h; u( H: Mlibdmdttut.so libdmudf.so libiconv.so libxerces-c.so.21
- p4 W& J0 Q2 t- A# x: Q% Klibdmjdbaut.so libdmxtm.so libiconv.so.2 libxerces-c.so.21.0
" }4 G8 w# N9 T
; ]/ z7 S1 J2 N其中的dmapic.so,便是DBMaker的native driver;由於DBMaker在開發之初,便是使用ODBC的開發介面,所以DBMaker的Native Driver,便是一符合ODBC API標準的Native Driver;而不像有些資料庫廠商,事實上還是需要另一層薄薄的轉換接口,才能將ODBC API轉成實際的Native Driver API。 [& ], t M8 E1 p* |
/ W- _ `8 L, ^2 B
安裝unixODBC. }* T- x P0 c4 Y! g5 I' ~$ E, P1 B
接下來談到本文的主角-unixODBC,由於多數人已習慣RedHat的rpm安裝方式,故本文會使用rpm來安裝,至於若要自行build者,請參閱unixODBC的官方網站。' ~1 g" n5 y6 }# u% B3 ?3 c
首先至官方網站中取得最新的unixODBC package,本文使用的是2.2.3-6的版本。
/ L) }7 G% K& e* _& I, {$ I接著,我們使用rpm將unixODBC安裝上去:
# o. R. \7 K. C& O& Y' h" t
, j/ O1 ^+ Q7 f0 m8 @( W[root@support tmp]# rpm -ihv unixODBC-2.2.3-6.i386.rpm # B/ s" U$ l5 x1 `
warning: unixODBC-2.2.3-6.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e* W ^/ j1 N3 T5 D) E
Preparing... ########################################### [100%]8 ? U, I3 Z; _+ e# L2 O" n+ B; k$ a
[root@support RPMS]# rpm -ql unixODBC|more<==檢查一下到底安裝了那些檔案!
" g) h6 r7 Y0 O3 m/ g+ S* g/etc/odbc.ini <==這是安裝DSN的檔案,本文的重點
) _/ `. s: ^* h1 S3 K! X$ H+ |0 [/etc/odbcinst.ini <==這是Driver Manager所放置的Driver設定區,亦為本文重點/ R5 ]# ?, k( I- `5 j
/usr/bin/dltest8 b5 g x* |) K3 o7 }$ x/ o
/usr/bin/isql
3 Y: I1 ~: E1 Y* ]4 O$ R1 ^6 e/usr/bin/iusql. i* S, ?2 ~, g2 r9 X, V2 @2 \" q8 m
/usr/bin/odbcinst8 Q- {$ f: u- a0 Z4 G+ @
/usr/bin/odbctest
+ G3 i- _/ D; d, [8 n/usr/lib/libboundparam.so.1- [8 r; V( S9 u) N
/usr/lib/libboundparam.so.1.0.0' ~; {' \" A. }& A) [' f J& `* e, X
/usr/lib/libesoobS.so.18 i: H( ~% i$ o1 g$ e1 ~, X
/usr/lib/libesoobS.so.1.0.0
$ T' @2 F& i( s) p! f2 v* i/usr/lib/libgtrtst.so.10 O" I2 X6 j( o: t
/usr/lib/libgtrtst.so.1.0.0
3 Z0 O; T( p4 S% B/usr/lib/libnn.so.1
8 {& [( h1 I& M. Q/usr/lib/libnn.so.1.0.08 Z( P! R& l0 u$ o& K
/usr/lib/libodbc.so
3 C/ l) M6 Q! A) I7 o* ^) R/usr/lib/libodbc.so.1
( S% t! X2 J0 u% s3 W2 q/usr/lib/libodbc.so.1.0.0
# a' Y+ `- \7 x9 l2 e............
/ _/ w7 V, |( B C0 ^) {8 J
8 N. X0 a- d" T7 Q& p
. M. m: m O4 f* V2 q
# x) k$ s# p m5 S$ ]/ E" g+ G設定unixODBC連接DBMaker 4.2% U' a/ E4 S' d' z, P- P" R
如上所述,我們接下來就是要將unixODBC與DBMaker的Driver串接在一起,如同在Windows上,去設定Driver Manager一樣。0 F1 z# b) R$ d0 R
" u' p" F2 {. o4 C% `* X2 J: S4 j
設定Driver" d! C; B) T. q. ^- e4 A
在Windows的Driver Manager中,我們所使用的Driver,事實上也是需先向Driver Manager登記的,這個動作由於多數是由資料庫廠商的安裝程式作掉,所以User可能完全不知覺。4 Z4 t8 [4 I& {+ L
但在unixODBC中,則必須由使用者自己來進行註冊Driver的動作,這個登錄的動作,即是要在/etc/odbcinst.ini中加上DBMaker相關Driver的資訊,我們首先打開這個檔案,並加上下面的幾行:
$ y: V3 J, L/ r1 ]) d0 e, d5 B0 V7 F& u1 n- W# {1 ^
[root@support RPMS]# more /etc/odbcinst.ini1 ^& p {/ b P1 y
# Example driver definitinions
0 M" C6 h: S/ ^2 d8 v% t#
7 p( o" L2 E8 w+ H( f#
3 [1 I: G* D; H( J& ~0 I' R5 \+ p5 C! U2 C \
# Included in the unixODBC package
) O; b+ K c+ ]: Z+ o7 H[PostgreSQL]
* i* @4 {0 W! B' O$ {# K# v- YDescription = ODBC for PostgreSQL
& _7 f7 s; V+ y* j r4 xDriver = /usr/lib/libodbcpsql.so' Z4 K& T8 m" u( W/ w8 M6 Z) o3 u
Setup = /usr/lib/libodbcpsqlS.so/ m3 c6 L0 w# g) ^5 x: d
FileUsage = 1& C7 X7 @/ l: M+ e
....9 Z/ U8 |7 z, N) v4 J2 @( x
[DBMaker 4.2 Driver] <==這就是您向unixODBC註冊的Driver名稱,可自行定義
, C) t0 X9 \; u D2 G; M: G% KDescription = ODBC for DBMaker 4.2$ q; s* ~* w5 h/ k/ A, S1 u
Driver = /home/dbmaker/4.2/lib/so/libdmapic.so <==必須登記您環境中,DBMaker所使用的Driver完整路徑0 c% P F+ W7 R" }' u7 N
#Setup = /usr/lib/libodbcdbmakerS.so
0 [7 G% G* m' p M8 c5 a5 UFileUsage = 0
. r- Y6 t9 `+ d! `. r) I/ l2 Q: L- a8 Q; d' ^1 ?! p
, k2 M+ G, a s' k8 {在設定Windows的Driver Manager時,在加上一個新的DSN時,資料庫廠商通常都提供一個安裝程式,讓使用者可以登記如Server位置、Port Number、須要使用什麼認證…等等。這個畫面就是上述的「Setup」,由於DBMaker目前在unixODBC中並未提供安裝畫面,故須暫時將它關閉;待之後的版本提供後,再把它開啟。
& N3 j/ R, J6 I6 `0 z7 \* Y# ?3 G+ A% e J" R% V5 V9 G+ Z- a! P
設定ODBC DSN
8 \9 H( `% n' V+ }& h接下來便是設定Data Source Name了(DSN),在Windows時,有所謂的System DSN及User DSN,其實主要的差別便是System DSN是可為所有User所存取,而User DSN則只能為某特定user存取;當login成另一位user時,便看不到原來User登錄的DSN了!
7 V" ~0 a( y* H4 R9 q( n7 Z而在unixODBC中,則是使用不同位置的檔案,來存放System DSN及User DSN,在我們的環境中,System DSN會放在/etc/odbc.ini,而User DSN則會放在個別User的家目錄/.odbc.ini。
% E: p1 O+ F( A由於我們要使用Web的PHP來連接DBMaker,所以要設定System DSN,以下是我們所放置的內容:
. F4 {, K# F, l! R. O' ` j+ C$ Z1 V- `5 g8 G% I
[dbsample4]0 {9 P! ~0 w' {3 z
Description = Database for dbsample4# ^/ g [9 a* r/ X; n7 F& Y
Driver = DBMaker 4.2 Driver <==注意,此處須與之前Driver設定的名稱相同
e* `. H: W! o d N( [Database = dbsample4 <== 資料庫名稱
* ^$ D: w+ M8 [+ jHost = localhost <== server所在位置
6 f5 p0 ?2 a; i6 T) @4 V4 }7 lPort = 2450 <== 埠位置
" E# x! q& s$ d+ z" V0 t; zUser = SYSADM <==使用名稱(DBMaker預設所使用的管理者名稱)
4 z+ @; c# \2 S( t# u+ cPassword = <==使用密碼 (DBMaker預設所使用的管理者密碼); l! b7 A, i( [/ O# Q% a! `
當然您可以使用不同的帳號/密碼登入,但此處為方便,使用DBMaker所預設建立的管理者帳號SYSADM,及預設的密碼(空白). s' ? d; ]9 c/ j! R
9 z: x+ g6 J5 p" L$ u/ ?
測試連接+ Y) n8 b% s# b" @1 u: Q
接下來,我們使用unixODBC所附的isql來連接dbsample4的資料庫,isql的標準語法為:
- j, y3 e( O9 {5 E2 u; v6 u* H6 l T9 |5 E( k; H* L
isql DSN [UID [PWD]] [options]: I) v8 ^# B6 z+ v% S$ _% `8 \
我們直接用下方命令來連接資料庫:
0 F8 R. h, i+ `- q3 X
y2 b" A" l" k9 b2 e' }; e. S/ c) L[root@support RPMS]# isql dbsample4 sysadm
. ?8 Q2 E# _: A0 l0 Q) E/ m* U: o) l+ r9 u
+---------------------------------------+
( Y! ?1 Q3 v8 o& i8 B% v# ~: g$ f" M/ p D
| Connected! |
; C9 {+ G" x8 G$ a, I: W1 I; C$ h- u/ T
| |
. c" I4 q/ D. b2 s) s
3 c7 N# G0 {" A6 k: _, d2 {" a| sql-statement |
3 i+ K! B' M; q$ V% _ S3 S/ [6 X+ l, e) p0 `
| help [tablename] |: @8 ~, @" d: x9 d# ]1 A
; D2 g b8 b( i; T* b| quit |, ?4 U* y2 r# B) i$ D% @
9 `) V* L, R5 ^% n# L. t| |* z) L8 f0 `, ^( `" K
6 H1 j7 Q, \% F3 M
+---------------------------------------+& R0 Y0 \* { [4 i* A3 X! u1 t, G
& Y: k: H" U/ h u2 k- |+ s0 VSQL> select * from SYSTABLE;
c6 w3 j u; p" e0 w
; F3 v5 o' I8 a+ F' i- P.......% q! {9 s6 ~3 U( C/ T, _" c% ]: o
) P/ _% u( G* K2 K0 l( |: U
3 I9 B% ]: v) d$ P8 W( U/ i這樣便可確認我們的確能從unixODBC中,正確連接到DBMaker sample4的資料庫!: g( C# G% {: L% f
! L9 A8 ^. j# ~PHP+unixODBC+DBMaker
- h! d5 z- o8 M" E現在我們能用unixODBC來連接DBMaker了,剩下來的工作就簡單多了,首先我們先確認我們的php是能夠呼叫odbc function的,先用測試程式看看php是否包含了odbc呼叫:5 Q: X" X! B& q* L# U5 h+ z1 C7 v
=>存成phptest.php
9 _1 W7 H, e5 Y/ c然後在Browser底下,查閱Configure Command,是否有--with-unixODBC=shared的文字!/ P, Z( V$ v. T( E
接著再查閱網頁中的ODBC該節,是否顯示ODBC Library為unixODBC!1 o7 n- W% U$ C6 [/ d, v3 G
若是以上都無誤的話,您可以撰寫以下的程式php_odbc.php:
+ W) R5 c6 m: e. Z5 O" Q. D8 ]& R" D6 |6 }" [
很有可能(最少筆者就碰到),此時卻顯示了無法認識odbc function call;這個問題在筆者這邊碰到時,先查了一下php裝設了那些rpm,後來便發現少裝了php-odbc這個套件,不知道是不是Distribution的問題(筆者裝的是RedHat 9.0)。當正確安裝了 php-odbc-4.2.2-17.i386.rpm後,再執行上述程式,便沒有發現錯誤了!7 i# p; N; q8 i+ r
有關php的設定及它與apache的設定,網站上另有一篇專文,請自行參閱。: D. N+ I% W* D2 G' m& Q/ T4 d
至此已經大功告成,user可以自行撰寫幾個簡單的測試程式,測試看看是否可以正確使用DBMaker,開始撰寫自己的網頁囉~
6 P( N5 O- l) _( L7 a, h: f2 A1 a8 Y% u# M4 J
結語$ p# |; }) C/ l: @* W
使用至今,我們發現unixODBC至少提供了幾個好處:3 w0 F* a1 ^- x- J
提供了Logical DSN對應到實體的Database Name 5 Y* [! A1 m5 I/ J7 w
可同時連接不同版本的DBMaker 1 T1 E( a( L2 a6 j4 \) ^3 @; q
7 Q( Q( w( ?6 ?) ^6 E/ I$ s% {+ l7 ^9 l
提供了邏輯與實體資料庫的轉換4 e% H" s9 l) c
這也是為何Windows ODBC Driver Manager為何歷久不衰的原因;透過odbc.ini的設定,將邏輯的資料庫名稱,對應到實際的driver及database name。這樣的設定,也一併解決了下面要說的版本問題
' M/ @! u c1 Y# _: H3 v/ E( P2 } G
連接不同版本的DBMaker
' M$ q* p+ Y6 X/ [' l4 R9 b這是筆者最喜歡的一點!在早期build PHP時,必須要使用下面的方式來生成:3 F: a1 x+ Y% I4 F; ]
./configure --with-apxs=/usr/sbin/apxs --with-dbmaker=/home/dbmaker/4.2 --enable-track-vars9 A' C/ r/ r m" a
在這樣的設定中,其實已經把DBMaker的版本給設死在面,所build出來的libphp4.so,就是已經設死成只能連接DBMaker 4.2版本。
) @$ H5 S4 z3 }3 b若是今天想寫一支php程式能同時連接3.7及4.2時,那要怎麼辦呢?這就慘了,因為在這樣的架構下,是沒有辦法作到的。' c' t- N. G# N0 t( w
所以筆者有些機械的php就固定只能連3.7,有些機械就是放4.0;若要跨兩個版本的Database,就只能靠別的方法了。6 z/ x( g) [" A1 l" o! @
但unixODBC提供了這一層轉換方式,讓libphp4.so不是設死只能連DBMaker 4.2,而是能動態存取外在的ini檔案後,再去連接DBMaker不同版本的so。這樣一來,筆者就能在同一支程式,靠著不同版本在odbc.ini中的設定,而能同時存取了!
7 o! J5 l# h: v% d3 ?% {
9 B" N% f, D# k$ t3 b' `% I更多的應用0 z, [8 B* {7 i) F' s8 F
目前unixODBC已逐漸廣為人所接受,不單PHP,包括Perl、Python甚至Java-ODBC Bridge都能使用。如此一來,所有的資料源都可以集中交由unixODBC來管理,這個發展過程,在Windows Driver Manager發展之時也都有過,而它顯而易見的好處,造成了Driver Manager及ODBC的風行!而也希望透過這篇文章,幫助使用者瞭解它,學習它,使用它,最後能真正地喜歡它!
|