麻辣家族討論版版's Archiver

小誌 發表於 2010-5-16 15:28

(PHP+IIS+MsSQL教學第23篇) 資料庫驅動程式與 ODBC 連結

現今的網路電子商務免不了要與資料庫扯上關係,這裡所指的資料庫是:Web Server 上的資料庫喔!其實資料庫不就是一個檔案,但是,它是一個結構化儲存資料的格式檔案。其實我們常常在使用資料庫而不自知,怎麼說?你有沒有操作過.mdb 的檔案啊?它就是一個 Access 格式的資料庫檔案。


[color=DarkOrange][b][size=5]資料庫驅動程式[/size][/b][/color]
我們存取任何一種資料庫都必須有其相對應的資料庫驅動程式,才能夠對資料庫的檔案作存取的動作!
[list]
[*]ODBC (Open DataBase Connectivity)
[*]OLE DB (Object Linking and Embedding DataBase)
[/list]以上這兩者皆為驅動程式類別,應用程式可藉由此驅動程式介面來存取資料庫的資料,如下圖所示。
[attach]481[/attach]


[color=Green][size=4][b]查看已安裝的驅動程式[/b][/size][/color]
在我們的機器上到底安裝了哪些ODBC資料庫驅動程式呢?要查看我們機器上安裝了哪一些資料庫驅動程式,首先,我們必須先打開『控制台』

小誌 發表於 2010-5-16 15:35

[color=DarkOrange][size=5][b]ODBC連結資料庫[/b][/size][/color]
ODBC連結資料庫的方法分為兩種,一種為「DSN(Data Source Name)」,另一種為「DSN-less」:「DSN」的方式必須透過「ODBC資料來源管理員」的設定,這方式比較不建議採用,因為設定過程繁瑣,若非是自己的機器恐怕不容易獲得設定的權限,而「DNS-less」方式則是一個變通的方式,在連結資料庫的過程給予適當的連結參數即可。



[color=Green][size=4][b]連結資料庫的函數[/b][/size][/color]
要對資料庫存取資料必須先進行資料庫的連結的動作,就如駝我們要讀取檔案資料時用fopen()函數開啟檔案一般,要對Access、SQL Server進行連結動作可使用ODBC資料庫函數:「odbc_connect()」或「odbc_pconnection()」函數。
odbc_connect() 函數[code]resource odbc_connect ( string dsn, string user, string password [, int cursor_type])[/code]當資料庫連結成功則回傳連線的編號,若連線失敗則回傳0。


odbc_pconnect() 函數[code]resource odbc_pconnect ( string dsn, string user, string password [, int cursor_type])[/code]當資料庫連結成功則回傳連線的編號,若連線失敗則回傳0。


odbc_close() 函數[code]void odbc_close ( resource connection_id)[/code]odbc_connect()函數是暫時性的連線,每次連結都會使資料庫產生一個新的連線者,所以每次連結後,當不需要此連線時就該用「odbc_close()」函數關閉連結,不然您的資料庫或伺服器負擔太重就會出問題。

odbc_pconnect()函數是獨占性的連線,當與資料庫往返的資料大時,可使用此函數連結資料庫,即使PHP程式已經執行完畢,此連線依然存在,若此連線暫時沒有用到則連線進入「休眠(sleep)」狀態。

對於SQL Server,除了可使用ODBC資料庫函數群外,PHP亦提供了SQL Server專屬的MSSQL函數群,因此連結SQL Server資料庫也可以使用「mssql_connect()」或「mssql_pconnection()」函數,如果您的資料後端為SQL Server,建議您使用SQL Server專屬的MSSQL函數群。

mssql_connect() 函數[code]int mssql_connect ( [string servername [, string username [, string password]]])[/code]當資料庫連結成功則回傳連線的編號,若連線失敗則回傳0。


mssql_pconnect() 函數[code]int mssql_pconnect ( [string servername [, string username [, string password]]])[/code]當資料庫連結成功則回傳連線的編號,若連線失敗或發生錯誤則回傳false。



[color=Green][size=4][b]DNS-less連結資料庫[/b][/size][/color]
[color=Magenta]連結Access2000資料庫[/color]
連結Access2000資料庫是使用odbc_connect()函數:[code]odbc_connect(“ODBC字串”,”帳號,”密碼”)[/code]基本上,連結Access2000資料庫時,ODBC字串中需給定兩個ODBC參數值:
[list=1]
[*]Driver:連結Access2000資料庫所需的ODBC驅動程式。
[*]DBQ:Access2000資料庫的本機「實際路徑」。
[/list]
以連結Access2000格式的students1.mdb資料庫檔案為對象:[code]<?
$Provider="Driver={Microsoft Access Driver (*.mdb)};";
$Path="DBQ=" . getcwd() . "\\" . "STUDENTS1.mdb";
//連結資料庫
odbc_connect($Provider . $Path,"","");
?>[/code][list]
[*]「$Provider="Driver={Microsoft Access Driver (*.mdb)};"」:使用變數Provider來指定我們要使用的資料庫驅動程式,因為我們要進行連結存取的資料庫檔案類型為Access格式,所以使用的ODBC資料庫驅動程式為:「{Microsoft Access Driver (*.mdb)}」。
[*]「$Path="DBQ=" . getcwd() . "\\" . "STUDENTS1.mdb"」:使用變數Path來指定我們要使用的資料庫路徑與檔名;我們要進行連結存取的資料庫檔案,必須指定此資料庫檔案的完整路徑名稱,所以我們必須使用『getcwd()』方法來取得目前城市執行的完整路徑名稱,接著再加上資料庫的相對路徑與資料庫檔案名稱。
[/list]



[color=Magenta]連結SQL2000資料庫[/color]
SQL資料庫的連結必須對應管理資料庫的SQL Server,所以連結的參數比較多:
[list]
[*]Driver:連結SQL Server所需的ODBC驅動程式。
[*]Server:欲登入的SQL Server主機名稱。
[*]UID:登入SQL Server的帳號。
[*]PWD:登入SQL Server的密碼。
[*]DataBase:登入SQL Server後要連結使用的SQL資料庫名稱。
[/list]
以連結SQL2000內建的Northwind(北風)資料庫檔案為對象:[code]<?
$dnsless="Driver={SQL Server};" .
         "Server=(Local);" .
         "UID=SA;" .
         "PWD=12345;" .
         "DataBase=Northwind";
//連結資料庫
$z=odbc_connect($dnsless,"","");
echo $z;
?>[/code][color=Red] 提示!![/color]
Server參數值「(Local)」代表登入的SQL Server為本機伺服器,若非本機伺服器,則Server參數值必須指定為欲登入的SQL Server主機名稱。

小誌 發表於 2010-5-16 15:43

[color=Green][size=4][b]DSN連結資料庫[/b][/size][/color]
「DSN-less」方式是在連結資料庫時,完整的指明資料庫驅動程式、資料庫檔案位置…等等;而「DSN」方式則是將連結資料庫時所需的參數資料預先設定好,將這些資訊交由「ODBC資料來源管理員」集中儲存與管理。
使用「ODBC資料來源管理員」設定DSN資料來源的步驟如下,以設定SQL Server資料來源為例:
[list=1]
[*]打開『控制台』=>『系統管理工具』,然後再開啟『ODBC 資料來源』項目。
[*]在「ODBC資料來源管理員」切換操作頁籤為『系統資料來源名稱』。
[attach]484[/attach]

[*]在『系統資料來源名稱』頁籤中按下「新增」按鈕,此時,將會出現「建立新資料來源」視窗,於視窗中選取「SQL Server」,接著按下「完成」按鈕:

[attach]485[/attach]

[*]於「建立新資料來源」視窗中按下「完成」按鈕後,接著出現「建立新的資料來源至SQL Server」視窗,在此視窗中,我們必須為新的資料來源命名,並指定要連線的SQL Server,若是本機伺服器,則選取「local」即可,輸入完畢後按下「下一步」按鈕。

[attach]486[/attach]

[*]接下來為設定驗證模式與登入帳號、密碼,登入驗證的模式請選擇「混合模式(由使用者所輸入的登入識別碼及密碼進行SQL Server帳戶驗證)」,至於帳號密碼先用我們安裝SQL Server時的管理員(sa)帳號跟密碼,至於SQL Server使用者帳號的設定,如果後續有用到我們再談。
[attach]487[/attach]

[*]指定預設資料庫,設定成功登入SQL Sserver所要使用的資料庫。

[attach]488[/attach]

[*]再來為相關的需求設定,採用欲設值即可,直接按下「完成」按鈕。

[attach]489[/attach]

[*]接下來出現的我們剛剛設定的訊息內容報告,先別急著按「確定」按鈕,要先測試一下設定是否正確無誤。

[attach]490[/attach]


[*]按下「測試資料來源」按鈕,進行資料庫連結測試,如果出現下圖的結果,就表示我們設定成功了:

[attach]491[/attach]

[*]按下「確定」按鈕,回到圖7-10的視窗畫面中,再次按下「確定」按鈕回到「ODBC資料來源管理員」視窗中及可發現薪資的系統資料來源:
[/list][attach]492[/attach]


當我們完成了DSN的設定後,在使用odbc_connect()函數連結資料庫時,ODBC字串參數就只要給系統資料來源名稱「mySQL」、帳號與密碼即可。
odbc_connect("DSN名稱","帳號","密碼");
例如:[code]<?
$y=odbc_connect("mySQL","sa","12345");
echo $y;
?>[/code]使用
mssql_connect()函數連結資料庫時,ODBC字串參數一樣給系統資料來源名稱「mySQL」、帳號與密碼即可。[code]<?
$y=mssql_connect("mySQL","sa","12345");
echo $y;
?>[/code]

a01456655 發表於 2013-8-7 13:39

不好意思
我在 DSN連結資料庫 有錯誤訊息
錯誤訊息是:連線失敗與不存在或拒絕存取
我照著您的步驟做
但是有錯了
請問小誌大大
要如何改善呢?
我OS是Win7

小誌 發表於 2013-8-7 21:40

[quote]不好意思
我在 DSN連結資料庫 有錯誤訊息
錯誤訊息是:連線失敗與不存在或拒絕存取
我照著您的步驟做
但 ...
[size=2][color=#999999]a01456655 發表於 2013-8-7 13:39[/color] [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=56704&ptid=313][img]http://forum.twbts.com/images/common/back.gif[/img][/url][/size][/quote]

你連結資料庫的帳號密碼是正確的嗎??

a01456655 發表於 2013-8-8 09:20

我在網路上找到解決方法了,給版大看看是否有差別
如下:
$conn = mysql_connect("127.0.0.1",'userid','password') or die("can't open this DB");
版大您用的是  mssql 但我用別人教的  mysql 就可以連上
mssql 與 mysql 這二個函式有什麼差別嗎??

a01456655 發表於 2013-8-8 09:26

我在第4步驟就沒有出現 (local)
我是手動自己打上 (local)
可以執行下一步
但是在第5步驟  輸入帳密這打完後按下一步就出現了錯誤訊息
有沒有方法可以查知自己是否有資料庫呢 ??

小誌 發表於 2013-8-8 11:19

[quote]我在第4步驟就沒有出現 (local)
我是手動自己打上 (local)
可以執行下一步
但是在第5步驟  輸入帳密這打 ...
[size=2][color=#999999]a01456655 發表於 2013-8-8 09:26[/color] [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=56735&ptid=313][img]http://forum.twbts.com/images/common/back.gif[/img][/url][/size][/quote]


    本篇教學針對 微軟的SQL SERVER
請確認你已安裝 SQL SERVER

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供