|
管理員
  
|
1#
大 中
小 發表於 2009-6-10 01:48 PM 只看該作者
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
" v: Z5 u5 c( ^. g% M技術專區 - 如何在Linux上安裝 unixODBC + DBMaker
) r3 T" u. Z# a5 ?0 F: T目錄
" b! f' ~$ R! r! k; d) u1 如何在Linux上安裝 unixODBC + DBMaker; o. B, [+ J: X6 p% `( V
/ F# L' e, v5 o- G: m5 I
2 unixODBC介紹6 K5 o. w# F# I, S F
7 A/ I; R+ S4 W; [ {9 N' n9 A
3 DBMaker簡介4 f ^" d$ f9 b) i
3.1 DBMaker在Linux上的安裝4 ^- ^' e4 A& t& ^ m
3.2 下載DBMaker 4.2
5 @% \2 H1 c3 Z: g! z4 \3.3 安裝DBMaker! {. c% q6 e& ^7 T" J7 q
3.4 檢視安裝後的環境
$ L. G; n0 y1 ~' h( W M7 N6 B/ Q. B" P# g8 j% v, l* @" W9 p8 c: d5 H
4 安裝unixODBC4 o5 v6 e7 D1 K! g
4.1 設定unixODBC連接DBMaker 4.2
+ @9 o7 k- i# ]; j* _: D# y$ J% S 4.1.1 設定Driver
, i) i1 H! G' ]7 N E ^ 4.1.2 設定ODBC DSN
( c5 ^1 Z: T! } 4.1.3 測試連接
9 P! G, X5 f, W4 v. U+ |! p4.2 PHP+unixODBC+DBMaker1 ]' C: y/ v3 P `& w+ i
8 b. A2 ~0 D* X$ w0 S8 @' D( A
5 結語
. `! e% T* D1 s$ }4 E% e- `5.1 提供了邏輯與實體資料庫的轉換
3 X- I0 z$ d/ ?/ P9 ~, |" `. S5.2 連接不同版本的DBMaker# }$ ?0 u4 L Z5 l+ r
5.3 更多的應用0 P' g5 ?- ]/ X Z- }4 f" K# U
* e3 B( h/ M7 F3 t( K4 }' R5 C: F+ V' X, s# T. v
如何在Linux上安裝 unixODBC + DBMaker
9 V3 A: A2 l6 i0 d* r在Windows中相當好用的ODBC Driver Manager,在Linux中卻一直沒有相同的設定;而現在Linux也有了類似的unixODBC了!在本文中,除了介紹unixODBC的設定外,也會介紹如何透過PHP去連接DBMaker資料庫,及使用unixODBC所帶來的好處。
, f* o; t& Z7 y7 @( w' I6 h$ x4 ]/ s( }
* |6 T1 d; N/ u( V3 T, s9 ?) M+ J
! f( ^9 r% m7 `8 l9 ~) NunixODBC介紹
' z7 t5 l' P. i- C5 |ODBC(Open DataBase Connectivity)是一個跨平台的標準介面,從1990年代開始推行以來,一直廣為業界所使用,即使如今有ADO或JDBC等新的標準,在業界中卻仍時常見到這種界面。即是因為推廣的時間久及開放式的架構,讓用戶已經習慣且易於去使用它了。
- F, }# J2 k8 d( I( a# Q) V$ _1 A7 H* G1 [2 g3 ?/ s/ F
在Windows中,透過ODBC Driver Manager,各家資料庫可個自保留自己的Native Driver,然後使用一層轉接接口,將相對應的ODBC Call轉化成自己的Native API Call;但在User的角度而言,這兩者在外觀上是完全相同的,而各家資料庫則需負責將標準的ODBC Call,轉換成自己獨特的Native Call。 1 T4 i1 h7 u; g8 d
+ X% B+ @/ L: h- @: L9 I這樣的使用方式,讓ODBC在推出不久,即廣為用戶所接受,User也都習慣在ODBC Driver Manager中註冊自己的Driver,及設定相關的DSN(Data Source Name)。 2 {1 J% F( _% [! h. ]9 k
' ~& ?$ d+ {4 W+ c5 O/ G; C* c
這樣方便的設計,在Linux中,卻一直欠缺相同的機制;使得當要使用各式語言去連接資料庫時,便得依該語言的特性去重build一版可呼叫Native Call的模組(module),而一旦Build完後,若當中需要一些變動(如版本昇級),常常就要重build一次,這樣的設計使得Linux在使用資料庫時,極為不便!! : s* y; }, G' p+ M+ a( f1 w! G
; L8 f% Z' ?$ N$ F' q有鑑於此,便有一unixODBC的組織嚐試在Linux底下,建立類似ODBC Driver Manager的機制。此一機制與ODBC Driver Manager的功能相仿,便是要能提供Runtime的動態變換功能,讓AP可以透過ODBC Driver Manager,動態地載入不同的資料庫Driver,透過這樣的方式去連接資料庫。 . B' h8 N) w# ^, n, |, D7 n8 Q
% v1 Q$ Y* k' x" g如今,許多Distribution廠商都已經將unixODBC列為標準安裝的套件,而愈來愈廣為人知,本文即是要安裝unixODBC,並利用PHP去連接DBMaker 4.2資料庫,並由此來看看使用unixODBC所帶來的方便性。有關unixODBC的其他說明,請參閱官方網站。
6 [# }3 {8 ?: O) P `# B
/ e3 U. w1 h' G' M, ?) oDBMaker簡介
+ S+ B3 H! W& ~$ }DBMaker為一跨平台的大型關聯式資料庫,符合SQL 99標準,擁有開放式架構,在處理多媒體、全文檢索上擁有強大的搜尋性能;有關DBMaker Engine部份的介紹,請參閱DBMaker的其他相關文章,本文不再贅述,而只著重在使用unixODBC方式的介紹。
/ ] C2 b$ [$ e5 s$ `2 `. D4 I/ Y8 L& j. l2 B" r# W
首先DBMaker是一跨平台的大型資料庫,故在Windows、Linux上的安裝與使用幾乎是一致的。若您尚未使用過DBMaker,我們簡單介紹如何在Linux上安裝DBMaker,與其他資料庫相較,您會發現在Linux安裝DBMaker是一件相當輕鬆愉快的工作。 7 S3 i% ?7 N$ l" B; Z4 X( i, Y; E" w
- ~ k0 Z4 [4 p( g2 UDBMaker在Linux上的安裝
5 f6 r4 m- ]) h% D q8 q' ~3 p加入dbmaker的user 首先您須在Linux底下,加入dbmaker這個user,不要忘記請一併將密碼設定好:
( E: a$ B& L% Z/ k% T$ A' Y( l$ o
* F9 p/ k# E: T7 P5 T8 p, p! t' M5 |4 c+ H$ y
[root@support root]# adduser dbmaker
4 I. @# A! g; u( n[root@support root]# passwd dbmaker6 B* X Q% t( F
Changing password for user dbmaker.
; t( l- |( O. u3 D5 g( d$ `, c. {New password: ! O6 V9 w6 c" Z2 C7 m
Retype new password: 1 t _- {8 c# N. j2 Y
passwd: all authentication tokens updated successfully.* S) c$ ?- a3 p7 x2 x
' S- D1 E- G' H
一般說來,除非另行指定,否則dbmaker的家目錄會放在/home/dbmaker底下。 2 c) {9 v/ N3 Z& h: B/ k) j
7 w9 e9 t' a( n$ E5 s
下載DBMaker 4.2
, `9 T0 l% E7 A4 _接下來,請至DBMaker的官方網站下載區,去下載最新的DBMaker 4.2版本,將其放在適當的地方。(本文將其放置在/tmp底下)
3 y- E4 c3 V1 t; S6 a# P
* I5 x1 e E T" I0 a[root@support tmp]# pwd* Z K8 N& S" \& C$ R' S0 L" C
/tmp( q6 d* j* c* o6 X4 j. I/ @
[root@support tmp]# ls -al dbm*3 O: r/ _0 j8 D, J Q: ]& _8 @& m
-rwxr--r-- 1 alen alen 34649895 11§ 23 14:48 dbmaker-4.2.0-Linux2.x86.tar.gz& F% o. J H* D; }1 h
[root@support tmp]# tar zxvof dbmaker-4.2.0-Linux2.x86.tar.gz <==解壓縮
) I7 x6 E% \2 w+ V" hdm420.tar5 w {+ L7 T/ K$ X8 ?4 I6 \' \
setup
- p3 {+ w& T3 v, t, M! o! C; D6 r( s
安裝DBMaker
r+ C2 d; n# J( N5 w接下來,請切換至dbmaker這個user,並執行setup程式,為了能正確執行setup,請將setup程式改變模式成「可執行」。 7 Q: O j) m: G/ Y" U
6 P& g# u7 P, ?( l9 b3 C. z y' h: W* ?1 W
[root@support tmp]# chmod a+x setup <==切換成可執行
' [' P1 S6 x6 ?9 O p( X* M[root@support tmp]# su dbmaker <==切換成dbmaker後,進行安裝
' d' H) K3 O- U& U) P" P3 \# {[dbmaker@support tmp]$ ./setup
' W2 `4 ^) g; W' R" P3 F h/ ^( [: T# V4 j& H2 ]( }% ?* D
( o. n. W: m% h
==============================================================
: V+ o& H" V4 h# Q* ]1 _& }( ?DBMaker Database Management System Installation
2 V! W2 X% u7 e& s0 Q( CFor DBMaker Release 4.2.02 H+ |; a4 W2 g9 v
Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved./ s6 ]* Y* J; R8 R* F7 ?9 A
==============================================================
9 v' F* F( k: q- B! q7 ZInstall Components:
' }8 Y+ Z) c9 j8 [" @[A] DBMaker Server .............. (yes) Language: [ Western, Big5 ]& l- O; s! f O. w% O$ Q# I+ g4 i
[B] DBMaker Client ............... (yes)
4 R N. J, E7 g[C] Sample Programs............... (yes)
3 c {2 T# _8 m v: p! {7 Y[D] Tutorial Database.............. (no)
/ q2 I7 ] x) ~& I. k& ]0 u( W[E] Documentation ................. (no)8 Y& P# P7 G% p
Install Path:" ?/ o+ L, ]1 J; p% Y6 j
DBMaker Home directory: /home/dbmaker
! H9 _7 g# v( v% b E[Y] Start Install [N] Quit
- y8 U2 C% j/ ^0 x+ `Please press [ A B C D E Y N ] Y <==為簡單計,請直接使用「Y」進行安裝
* j w2 P3 a: c( j# m$ Z8 V' g9 y: {+ T
當您按下Start Install後,DBMaker就開始安裝,約1-3分鐘內,安裝便可完成,可說是又快速、又方便呢!
, r% G) V9 J5 x& x G/ K$ T- n M& p; ]: E
檢視安裝後的環境
3 O) s; Z4 x/ U3 K' w" q( m w在上述安裝完DBMaker後,DBMaker會自動產生一個範例資料庫-DBSample4,我們可以用下面的方法來啟動這個資料庫:
$ L. i7 d: L/ t, I; V l. X! k" V% W0 n
--------------------------------------------------------------------------------- ^& Q }" D5 x2 v2 u+ B
[dbmaker@support bin]$ cd /home/dbmaker/4.2/bin <=切換至命令目錄,注意此時使用的user為dbmaker!
! c! Z! `7 d/ i% b; ^, k1 p[dbmaker@support bin]$ ./dmserver dbsample4 <= 使用此命令來啟動資料庫
% u3 ~& L5 Q, u7 c0 uDBMaker 4.2.0 (#4721, 20040924)
?2 E# z+ j7 _9 z3 X. i. ^Copyright(C) 1995-2004 CASEMaker Inc. All rights reserved.
7 I7 G0 ^5 `% x& ]& ^SQL Server bound to port 2450 <==已在埠位2450上準備接收request
3 Y* }& r% l1 [4 u3 p& a, c0 s: NDatabase Server is running in the background mode.
- _! @4 U: i; n q3 V. {* I. I TProcess ID = 15668
4 u) H1 y8 A7 ?, r% ]! P: ]( O6 T
& o) z/ M2 w3 }4 m這樣資料庫就啟動了,您可以參考DBMaker的其他手冊,使用其他工具來操作這個資料庫;(有關資料庫服務的埠位、名稱等設定,都記錄在/home/dbmaker/data/dmconfig.ini文檔中,有關此文檔中的相關設定,也請參考DBMaker線上手冊)。# u) V v3 V( b6 p8 A
在安裝完DBMaker後,應該就可以在/home/dbmaker/4.2/lib/so中,找到DBMaker的odbc native driver。. j& `# {0 K# G% \1 B) w% i
, g, W% X B) @! D2 y8 B[dbmaker@support bin]$ ls /home/dbmaker/4.2/lib/so/
8 p+ w3 E& f2 m1 c! a! E) k/ i2 @/ Qlibdmapic.so libdmjdbc42.so libdmxtt.so libiconv.so.2.2.03 f7 p3 Q, v" q8 `# Y6 F
libdmapis.so libdmjsvrut.so libexpat.so libxerces-c.so/ @4 a+ n0 Y# i8 Y
libdmdttut.so libdmudf.so libiconv.so libxerces-c.so.21 G: P& K, l: T! M# b- j* M9 ?$ O
libdmjdbaut.so libdmxtm.so libiconv.so.2 libxerces-c.so.21.0
& Z/ X( r+ a0 c/ M, n
( f( r+ ~) b) o; p其中的dmapic.so,便是DBMaker的native driver;由於DBMaker在開發之初,便是使用ODBC的開發介面,所以DBMaker的Native Driver,便是一符合ODBC API標準的Native Driver;而不像有些資料庫廠商,事實上還是需要另一層薄薄的轉換接口,才能將ODBC API轉成實際的Native Driver API。
* E( q( f9 I& b0 v! v) B4 U& |9 q# k
安裝unixODBC) a6 E8 J* d/ r3 N9 i" p7 x8 W
接下來談到本文的主角-unixODBC,由於多數人已習慣RedHat的rpm安裝方式,故本文會使用rpm來安裝,至於若要自行build者,請參閱unixODBC的官方網站。
8 A J2 w" y9 M% S首先至官方網站中取得最新的unixODBC package,本文使用的是2.2.3-6的版本。: W, m% y0 e, O* h, Y r
接著,我們使用rpm將unixODBC安裝上去:1 T X0 j) g% Z( `8 r! T
9 W: ] K- b, v6 @, j
[root@support tmp]# rpm -ihv unixODBC-2.2.3-6.i386.rpm $ c1 E- f0 P/ _/ e" D4 N+ t( z1 q
warning: unixODBC-2.2.3-6.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e* W% f$ Q) m( h( w# [
Preparing... ########################################### [100%]& ^. y7 `% P& q' L4 K6 n
[root@support RPMS]# rpm -ql unixODBC|more<==檢查一下到底安裝了那些檔案!9 i; A k* w- M: B1 Z/ s, Q* ]
/etc/odbc.ini <==這是安裝DSN的檔案,本文的重點
" w9 s, j. Z$ s/ [0 F) U% L/etc/odbcinst.ini <==這是Driver Manager所放置的Driver設定區,亦為本文重點
' C. E, U3 {: ?1 E( t/usr/bin/dltest# s5 w- v# y, D6 x% k5 K- L3 k" J% Q
/usr/bin/isql
& Z. a7 m/ d) d$ m# C/usr/bin/iusql1 e0 d/ R, j$ p
/usr/bin/odbcinst3 c8 q3 ^& R4 t
/usr/bin/odbctest
* G, P' |% l- M- Z/usr/lib/libboundparam.so.1
3 J5 x5 ]# _- e# o' i/usr/lib/libboundparam.so.1.0.0
Q% K. t6 V/ q& i, l% n/usr/lib/libesoobS.so.1
6 d/ T! J6 J- h" {4 ^/usr/lib/libesoobS.so.1.0.0; Q1 f: E3 ~9 q( y8 w9 {" y
/usr/lib/libgtrtst.so.1
% [ ~- P" q' l2 V" M/usr/lib/libgtrtst.so.1.0.0" {/ `0 ]5 D$ j- H/ W
/usr/lib/libnn.so.1( w/ N0 y6 ]1 w+ j
/usr/lib/libnn.so.1.0.0" _& c9 u: |( J9 O' b, q
/usr/lib/libodbc.so, z0 l) A4 w3 V# s- K% Z0 a
/usr/lib/libodbc.so.1
9 }( o1 B0 |, p; B1 e" _/usr/lib/libodbc.so.1.0.0
3 f+ k# F6 k+ O7 t! z2 h5 p............3 O' n; Q/ y+ i$ H+ S2 ^
& a. R" G+ q' n/ X: Q3 W6 ?7 A7 k# `6 I7 s) l f7 n1 z
: a- i7 } K: l2 y
設定unixODBC連接DBMaker 4.2( R& L& g! }4 @2 X/ w# h4 H
如上所述,我們接下來就是要將unixODBC與DBMaker的Driver串接在一起,如同在Windows上,去設定Driver Manager一樣。8 ~% V$ h( D) u) S$ ~9 b3 ^: W9 A
3 c" Z' z3 t2 k
設定Driver
- O* D5 i2 ~; p在Windows的Driver Manager中,我們所使用的Driver,事實上也是需先向Driver Manager登記的,這個動作由於多數是由資料庫廠商的安裝程式作掉,所以User可能完全不知覺。
$ {0 ~8 a" k" j1 h# n6 o但在unixODBC中,則必須由使用者自己來進行註冊Driver的動作,這個登錄的動作,即是要在/etc/odbcinst.ini中加上DBMaker相關Driver的資訊,我們首先打開這個檔案,並加上下面的幾行:. }7 G( y* S5 B2 H
$ ^4 u% c- y( g; @[root@support RPMS]# more /etc/odbcinst.ini4 j- M' A) l' J* q
# Example driver definitinions
' U8 |- N: ^& w7 p8 B/ M#! D3 ~) ?* E" t6 P/ x* f& m4 ~2 D
#
9 e1 h- _' }1 |3 l7 A, _& F
) C0 M' {: j# p5 ]$ m+ C# Included in the unixODBC package
: o( M) h' r3 l9 a% r[PostgreSQL]- I, C. a% S6 e+ s) h! y
Description = ODBC for PostgreSQL
( K: y1 r$ o2 Y6 x% F6 Q% zDriver = /usr/lib/libodbcpsql.so
7 R) F) c% L y. M" D. T5 ?. BSetup = /usr/lib/libodbcpsqlS.so
5 |3 u5 K) L- ~2 I+ q$ EFileUsage = 1; y* R# @3 H/ F! c5 ~
....9 {8 X( z5 ~* i: _( i, J
[DBMaker 4.2 Driver] <==這就是您向unixODBC註冊的Driver名稱,可自行定義
2 x* V- Z6 y, e E) HDescription = ODBC for DBMaker 4.2
# A* b; f4 ~& L, ?2 ~0 ], pDriver = /home/dbmaker/4.2/lib/so/libdmapic.so <==必須登記您環境中,DBMaker所使用的Driver完整路徑
/ Q9 |' z! l& [. ]7 A* b#Setup = /usr/lib/libodbcdbmakerS.so
: g9 a4 j9 E) P! O$ h; dFileUsage = 0
; C" z; h( C0 m I: _2 H$ g1 h; d/ @6 j5 Z C8 w9 x/ t
) K5 @* [- p/ U- z1 T/ v, y
在設定Windows的Driver Manager時,在加上一個新的DSN時,資料庫廠商通常都提供一個安裝程式,讓使用者可以登記如Server位置、Port Number、須要使用什麼認證…等等。這個畫面就是上述的「Setup」,由於DBMaker目前在unixODBC中並未提供安裝畫面,故須暫時將它關閉;待之後的版本提供後,再把它開啟。
/ W$ `% z% ]* u u# |: ?; C. w) V; Y4 d* _& l) k5 \- j, X
設定ODBC DSN, e0 C; ~9 H" F) o2 H) y
接下來便是設定Data Source Name了(DSN),在Windows時,有所謂的System DSN及User DSN,其實主要的差別便是System DSN是可為所有User所存取,而User DSN則只能為某特定user存取;當login成另一位user時,便看不到原來User登錄的DSN了!
u) w ?$ k+ m6 k5 y而在unixODBC中,則是使用不同位置的檔案,來存放System DSN及User DSN,在我們的環境中,System DSN會放在/etc/odbc.ini,而User DSN則會放在個別User的家目錄/.odbc.ini。
/ w. ~* V3 V/ p0 l" y) b由於我們要使用Web的PHP來連接DBMaker,所以要設定System DSN,以下是我們所放置的內容:
0 G! E6 I% L8 |; t
1 _( ?% c5 Q' A# y* ~5 l[dbsample4]9 N0 o) R4 \ C0 x8 z. \
Description = Database for dbsample4
. q+ G# a- R1 z+ K8 _* ADriver = DBMaker 4.2 Driver <==注意,此處須與之前Driver設定的名稱相同
# W$ J2 W/ P7 D5 d6 k+ wDatabase = dbsample4 <== 資料庫名稱
( q& c" c# }9 GHost = localhost <== server所在位置. c$ n2 h: x$ w: A
Port = 2450 <== 埠位置# G/ \5 M( R+ Z# [
User = SYSADM <==使用名稱(DBMaker預設所使用的管理者名稱)
& c5 D! |& E5 K# r* hPassword = <==使用密碼 (DBMaker預設所使用的管理者密碼)
% T- D5 n* v) @) a6 D) m當然您可以使用不同的帳號/密碼登入,但此處為方便,使用DBMaker所預設建立的管理者帳號SYSADM,及預設的密碼(空白)" o8 O& W* V2 k3 }% i! S- v
. q0 P( H! Y* k4 l6 _$ u2 e" M測試連接3 ~* b# a9 s. [0 d: Y, p4 S) p0 f
接下來,我們使用unixODBC所附的isql來連接dbsample4的資料庫,isql的標準語法為:) M# G6 _& P5 @7 |4 T+ k- `
3 j9 H: d" [ T/ a$ Y
isql DSN [UID [PWD]] [options]8 H3 J N+ {3 j( s4 {9 |/ G
我們直接用下方命令來連接資料庫:% f h G; q2 \3 ~
. B9 z$ E% w [9 K9 X0 h' S* B7 U
[root@support RPMS]# isql dbsample4 sysadm
' n* d# ?* w- O& c" P* r/ K2 k: K5 k' z) U
+---------------------------------------+# {$ z( b, Z/ q4 P3 X2 L
$ z2 _, L2 s7 u4 b" } r
| Connected! |
) T" G% }% k' V8 W2 j+ [
q1 S" | C9 [$ p| |! y1 b( x& c9 R$ q# L
9 o3 [: L+ Y$ ]
| sql-statement |4 v- s. i6 N& s0 P7 E( ~7 l
# S! I5 W5 o0 r* Q8 r| help [tablename] |
! G: k* U, E& f0 q3 x
% ?$ W/ J7 l) X* || quit |% O. F) z& ~/ C! J3 P; v
9 c$ T! n1 n+ M: }' Y; J, |
| |; i! c& F- b+ V$ G) F) @1 L& j
( i9 [! J: { i$ ^! H% \0 D
+---------------------------------------+* P6 Y6 E8 r2 I
3 z8 a% c7 U5 J. HSQL> select * from SYSTABLE;+ D2 k5 c6 p( Y; ^7 A- T z, s. m! Y
4 [( j: e0 N: N......., G1 L1 x' y: b3 w8 \( `7 u2 F
9 g. M- h& k9 A$ z7 k8 C
/ P& T2 y- K3 t( C$ `! i% K
這樣便可確認我們的確能從unixODBC中,正確連接到DBMaker sample4的資料庫!
: R' A% w# ^% W( F. |* m
5 |$ Q9 K& ~9 B1 n8 i0 ZPHP+unixODBC+DBMaker W8 F9 P1 o! p3 u6 G
現在我們能用unixODBC來連接DBMaker了,剩下來的工作就簡單多了,首先我們先確認我們的php是能夠呼叫odbc function的,先用測試程式看看php是否包含了odbc呼叫:2 }" {% {+ H& A" k O1 ^
=>存成phptest.php
( k- u$ l+ b, ^* x; J0 R然後在Browser底下,查閱Configure Command,是否有--with-unixODBC=shared的文字!5 D2 m; ?: {! W. _) g- v% g
接著再查閱網頁中的ODBC該節,是否顯示ODBC Library為unixODBC!
0 I9 r$ e- M# B! ?* T/ A若是以上都無誤的話,您可以撰寫以下的程式php_odbc.php:0 s0 }8 B! [( r& D& E. A# E
8 S7 `" v' W5 p \很有可能(最少筆者就碰到),此時卻顯示了無法認識odbc function call;這個問題在筆者這邊碰到時,先查了一下php裝設了那些rpm,後來便發現少裝了php-odbc這個套件,不知道是不是Distribution的問題(筆者裝的是RedHat 9.0)。當正確安裝了 php-odbc-4.2.2-17.i386.rpm後,再執行上述程式,便沒有發現錯誤了!
$ }8 M% V8 b9 k1 j) [1 j有關php的設定及它與apache的設定,網站上另有一篇專文,請自行參閱。* G( P' E. N D1 o% B0 m S) A' R
至此已經大功告成,user可以自行撰寫幾個簡單的測試程式,測試看看是否可以正確使用DBMaker,開始撰寫自己的網頁囉~
- |+ l$ ^! v" Q1 {: J8 S# ^" J9 f! T& x; c+ U3 s
結語
% f; q4 p4 p% D2 T& u3 x使用至今,我們發現unixODBC至少提供了幾個好處:
, X' R7 x7 o/ T提供了Logical DSN對應到實體的Database Name $ s# x7 a! B* a) @6 |
可同時連接不同版本的DBMaker
% N& G9 r e# }& `
- B* e l% _3 z: @2 @* c8 r提供了邏輯與實體資料庫的轉換! v& o9 S0 j" O7 r8 P. |
這也是為何Windows ODBC Driver Manager為何歷久不衰的原因;透過odbc.ini的設定,將邏輯的資料庫名稱,對應到實際的driver及database name。這樣的設定,也一併解決了下面要說的版本問題; [: B* `7 x+ P5 b
# B- [1 B$ Z# o3 _4 Q1 x
連接不同版本的DBMaker
# o7 d. K' R! F2 q: [* |這是筆者最喜歡的一點!在早期build PHP時,必須要使用下面的方式來生成:* p# V# b) B7 e- _
./configure --with-apxs=/usr/sbin/apxs --with-dbmaker=/home/dbmaker/4.2 --enable-track-vars
! I! s) f, }6 @) a在這樣的設定中,其實已經把DBMaker的版本給設死在面,所build出來的libphp4.so,就是已經設死成只能連接DBMaker 4.2版本。
. Z1 t$ R* V: g% ~9 d若是今天想寫一支php程式能同時連接3.7及4.2時,那要怎麼辦呢?這就慘了,因為在這樣的架構下,是沒有辦法作到的。
% u, t( o1 J2 g- U所以筆者有些機械的php就固定只能連3.7,有些機械就是放4.0;若要跨兩個版本的Database,就只能靠別的方法了。
# }! L& E3 u8 |) @/ @+ y5 M但unixODBC提供了這一層轉換方式,讓libphp4.so不是設死只能連DBMaker 4.2,而是能動態存取外在的ini檔案後,再去連接DBMaker不同版本的so。這樣一來,筆者就能在同一支程式,靠著不同版本在odbc.ini中的設定,而能同時存取了!
1 o6 p* G% l$ d' m* a: i2 k. w4 q; k: ~4 I
更多的應用
! G+ ^! ~0 L+ ^目前unixODBC已逐漸廣為人所接受,不單PHP,包括Perl、Python甚至Java-ODBC Bridge都能使用。如此一來,所有的資料源都可以集中交由unixODBC來管理,這個發展過程,在Windows Driver Manager發展之時也都有過,而它顯而易見的好處,造成了Driver Manager及ODBC的風行!而也希望透過這篇文章,幫助使用者瞭解它,學習它,使用它,最後能真正地喜歡它!
|