Board logo

標題: [教學] (PHP+IIS+MsSQL教學第23篇) 資料庫驅動程式與 ODBC 連結 [打印本頁]

作者: 小誌    時間: 2010-5-16 15:28     標題: (PHP+IIS+MsSQL教學第23篇) 資料庫驅動程式與 ODBC 連結

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


資料庫驅動程式
我們存取任何一種資料庫都必須有其相對應的資料庫驅動程式,才能夠對資料庫的檔案作存取的動作!
以上這兩者皆為驅動程式類別,應用程式可藉由此驅動程式介面來存取資料庫的資料,如下圖所示。
[attach]481[/attach]


查看已安裝的驅動程式
在我們的機器上到底安裝了哪些ODBC資料庫驅動程式呢?要查看我們機器上安裝了哪一些資料庫驅動程式,首先,我們必須先打開『控制台』
作者: 小誌    時間: 2010-5-16 15:35

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參數值:

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




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

以連結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主機名稱。
作者: 小誌    時間: 2010-5-16 15:43

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


當我們完成了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. ?>
複製代碼

作者: a01456655    時間: 2013-8-7 13:39

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

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


你連結資料庫的帳號密碼是正確的嗎??
作者: 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

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



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




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)