返回列表 上一主題 發帖

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

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

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


資料庫驅動程式
我們存取任何一種資料庫都必須有其相對應的資料庫驅動程式,才能夠對資料庫的檔案作存取的動作!

  • ODBC (Open DataBase Connectivity)
  • OLE DB (Object Linking and Embedding DataBase)
以上這兩者皆為驅動程式類別,應用程式可藉由此驅動程式介面來存取資料庫的資料,如下圖所示。
CH7_01.png
2010-5-16 15:27



查看已安裝的驅動程式
在我們的機器上到底安裝了哪些ODBC資料庫驅動程式呢?要查看我們機器上安裝了哪一些資料庫驅動程式,首先,我們必須先打開『控制台』
CH7_02.png
CH7_03.png
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

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



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


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


odbc_close() 函數
  1. void odbc_close ( resource connection_id)
複製代碼
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() 函數
  1. int mssql_connect ( [string servername [, string username [, string password]]])
複製代碼
當資料庫連結成功則回傳連線的編號,若連線失敗則回傳0。


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



DNS-less連結資料庫
連結Access2000資料庫
連結Access2000資料庫是使用odbc_connect()函數:
  1. odbc_connect(“ODBC字串”,”帳號,”密碼”)
複製代碼
基本上,連結Access2000資料庫時,ODBC字串中需給定兩個ODBC參數值:

  • Driver:連結Access2000資料庫所需的ODBC驅動程式。
  • DBQ:Access2000資料庫的本機「實際路徑」。

以連結Access2000格式的students1.mdb資料庫檔案為對象:
  1. <?
  2. $Provider="Driver={Microsoft Access Driver (*.mdb)};";
  3. $Path="DBQ=" . getcwd() . "\\" . "STUDENTS1.mdb";
  4. //連結資料庫
  5. odbc_connect($Provider . $Path,"","");
  6. ?>
複製代碼

  • 「$Provider="Driver={Microsoft Access Driver (*.mdb)};"」:使用變數Provider來指定我們要使用的資料庫驅動程式,因為我們要進行連結存取的資料庫檔案類型為Access格式,所以使用的ODBC資料庫驅動程式為:「{Microsoft Access Driver (*.mdb)}」。
  • 「$Path="DBQ=" . getcwd() . "\\" . "STUDENTS1.mdb"」:使用變數Path來指定我們要使用的資料庫路徑與檔名;我們要進行連結存取的資料庫檔案,必須指定此資料庫檔案的完整路徑名稱,所以我們必須使用『getcwd()』方法來取得目前城市執行的完整路徑名稱,接著再加上資料庫的相對路徑與資料庫檔案名稱。




連結SQL2000資料庫
SQL資料庫的連結必須對應管理資料庫的SQL Server,所以連結的參數比較多:

  • Driver:連結SQL Server所需的ODBC驅動程式。
  • Server:欲登入的SQL Server主機名稱。
  • UID:登入SQL Server的帳號。
  • PWD:登入SQL Server的密碼。
  • DataBase:登入SQL Server後要連結使用的SQL資料庫名稱。

以連結SQL2000內建的Northwind(北風)資料庫檔案為對象:
  1. <?
  2. $dnsless="Driver={SQL Server};" .
  3.          "Server=(Local);" .
  4.          "UID=SA;" .
  5.          "PWD=12345;" .
  6.          "DataBase=Northwind";
  7. //連結資料庫
  8. $z=odbc_connect($dnsless,"","");
  9. echo $z;
  10. ?>
複製代碼
提示!!
Server參數值「(Local)」代表登入的SQL Server為本機伺服器,若非本機伺服器,則Server參數值必須指定為欲登入的SQL Server主機名稱。
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

DSN連結資料庫
「DSN-less」方式是在連結資料庫時,完整的指明資料庫驅動程式、資料庫檔案位置…等等;而「DSN」方式則是將連結資料庫時所需的參數資料預先設定好,將這些資訊交由「ODBC資料來源管理員」集中儲存與管理。
使用「ODBC資料來源管理員」設定DSN資料來源的步驟如下,以設定SQL Server資料來源為例:

  • 打開『控制台』=>『系統管理工具』,然後再開啟『ODBC 資料來源』項目。
  • 在「ODBC資料來源管理員」切換操作頁籤為『系統資料來源名稱』。
    CH7_04.png
    2010-5-16 15:37


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

    CH7_05.png
    2010-5-16 15:37


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

    CH7_06.png
    2010-5-16 15:37


  • 接下來為設定驗證模式與登入帳號、密碼,登入驗證的模式請選擇「混合模式(由使用者所輸入的登入識別碼及密碼進行SQL Server帳戶驗證)」,至於帳號密碼先用我們安裝SQL Server時的管理員(sa)帳號跟密碼,至於SQL Server使用者帳號的設定,如果後續有用到我們再談。
    CH7_07.png
    2010-5-16 15:37


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

    CH7_08.png
    2010-5-16 15:37


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

    CH7_09.png
    2010-5-16 15:38


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

    CH7_10.png
    2010-5-16 15:38



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

    CH7_11.png
    2010-5-16 15:38


  • 按下「確定」按鈕,回到圖7-10的視窗畫面中,再次按下「確定」按鈕回到「ODBC資料來源管理員」視窗中及可發現薪資的系統資料來源:
CH7_12.png
2010-5-16 15:38



當我們完成了DSN的設定後,在使用odbc_connect()函數連結資料庫時,ODBC字串參數就只要給系統資料來源名稱「mySQL」、帳號與密碼即可。
odbc_connect("DSN名稱","帳號","密碼");
例如:
  1. <?
  2. $y=odbc_connect("mySQL","sa","12345");
  3. echo $y;
  4. ?>
複製代碼
使用
mssql_connect()函數連結資料庫時,ODBC字串參數一樣給系統資料來源名稱「mySQL」、帳號與密碼即可。
  1. <?
  2. $y=mssql_connect("mySQL","sa","12345");
  3. echo $y;
  4. ?>
複製代碼
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

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

TOP

不好意思
我在 DSN連結資料庫 有錯誤訊息
錯誤訊息是:連線失敗與不存在或拒絕存取
我照著您的步驟做
但 ...
a01456655 發表於 2013-8-7 13:39


你連結資料庫的帳號密碼是正確的嗎??
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

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

TOP

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

TOP

我在第4步驟就沒有出現 (local)
我是手動自己打上 (local)
可以執行下一步
但是在第5步驟  輸入帳密這打 ...
a01456655 發表於 2013-8-8 09:26



    本篇教學針對 微軟的SQL SERVER
請確認你已安裝 SQL SERVER
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

        靜思自在 : 待人退一步,愛人寬一寸,就會活得很快樂。
返回列表 上一主題