說明:
1:PHP5.2.x本身有個php_mssql.dll的擴充用來連接Sql server,但這個dll只是用來連接低版Sql server的(2000以下版本),在Sql server 2005以上版本無法使用mssql_connect連線到資料庫。
2:php5.3.x不再支援php_mssql.dll 拓展函式庫了,及時使用php5.2.x中的php_mssql.dll也無法使用。 微軟專門為PHP出了個SQL Server的擴充(Windows版本的),對於Windows下使用php開發SQL Server應用程式來說,這個擴充功能有利於利用SQL Server來開發php平台連接sql server資料庫管理系統。
一、php5.3以下的版本連接sql server
5.3以下的版本擴展裡面自帶一個php_mssql.dll;接數據庫的擴展,可以利用這個擴展鏈接數據庫,(只限於鏈接低版本數據庫)。
具體的步驟如下:
1:先安裝sql server,超級不好安裝,我之前安裝的是2008版本的,Windows過期後就不能用了,然後重裝還裝不上,最後重裝系統才裝上
2:確定SQL裝的時候用的是混合認證模式,或SQL驗證模式,然後打開php的設定檔(php.ini),開啟mssql擴充(extension=php_pdo_mssql.dll前面的分號去掉)並且需要把mssql.secure_connection = On 重新啟動後生效。
如果比較順利的話已經可以連接資料庫了,如果連不上就需要繼續低下的配置:
3: 檢查ntwdblib檔案的版本(php/下面和Apache/下面)下載正確的版本的ntwdblib.dll(2000.80. 194.0)覆寫現有的DLL文件,(把ntwdblib.dll,php_mssql.dll 複製到system32目錄中也可以)ntwdblib.dll 用於PHP連接MSSQL2005或2008的驅動程式文件。
4:測試連線:mssql_connect('localhost,1433', '使用者名稱', '密碼');
二、php5.3+連線sql server
其實5.3以下的php版本已經很少用了,況且安全性和相容性都不好,所以高版的php還是比較常見的。實作證明低版的php連線資料庫成功率比較低(2005以上的版本幾乎不能使用),建議使用php5.3+ php使用微軟專門的擴充SQLSRV 來連線sqlserver資料庫
步驟如下:
1:先到微軟網站下載SQL Server Driver for PHP 是一個自解壓縮的EXE文件,解壓縮後你會得到這麼幾個文件:
其中的52、53表示就是php的5.2.x和5.3.x 版本,選擇跟你php版本相符的;vc6或vc9的選擇要看你使用的是什麼web伺服器軟體,如果使用的是IIS那就選擇vc9的,如果是Apache 則選擇vc6的,ts和nts的選擇要看你安裝的php版本是線程安全版的還是非線程安全版,ts是線程安全,nts是非線程安全。
如果不知道可以在phpinfo裡看Zend Extension Build這個屬性如下圖:
2:將擴充拷貝到拷貝到php/ext目錄下,在php.ini檔案,加入程式碼:
extension=在ext下的pdo擴充功能(用於pdo)
extension=在ext下的擴充
3:重啟伺服器,開啟phpinfo();看到以下狀態就證明新增擴充功能成功,
4:連線測試:
<?php $serverName = "(local)"; $connectionInfo = array("UID"=>"sa","PWD"=>"admin","Database"=>"db_online"); $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn ){ echo "Connection established.\n"; }else{ echo "Connection could not be established.\n"; die( var_dump(sqlsrv_errors())); } sqlsrv_close( $conn); ?>
注意這裡的連接不是用mssql_connect而是用sqlsrv_connect,在這個版本中,還有幾個函數:
這個擴展為php新增了一系列sqlsrv_開頭的函數,常用的如下:
sqlsrv_connect
sqlsrv_close
sqlsrv_commit
sqlsrv_errors
sqlsrv_fetch
sqlsrv_fetch_array
sqlsrv_fetch_metadata
sqlsrv_num_rows
_rvsrv_fetch_metadata
sqlsrv_num_rows
_rvsrv_yrvlrvr.另外注意的是,如果使用這個擴充功能連接Sql server 2005以及以上版本的sql server(如sql server 2008),你還需要在機器上先安裝SQL Server Native Client
不然會出現以下錯誤:
array
0 =>array
0 =>string'IMSSP'(length=5)
'SQLSTATE' =>string'IMSSP'(length=5)
1 =>int-49
49
2 =>string'This extension requires the Microsoft SQL Server 2012 Native Client. Access the following URL to download the Microsoft SQL Server 2012 Native Client ODBC driver for x86: http://go.microsoft1.com/flink/Linko =163712'(length=216)
'message' =>string'This extension requires the Microsoft SQL Server 2008 Native Client. Access the following URL to download the Microsoft SQL Server 2008 Native Client ODBC driver for x86: http://go .microsoft.com/fwlink/?LinkId=163712'(length=216)
1 =>array
0 =>string'IM002'(length=5)
'STATSQLE' =>string'IM002'(length)=55)
1 =>int0
'code' =>int0
2 =>string'[Microsoft][ODBC 驅動程式管理員] 未發現資料來源名稱且未指定預設驅動程式'(length=71)
'message' = >string'[Microsoft][ODBC 驅動程式管理員] 未發現資料來源名稱且未指定預設驅動程式'(length=71)
. . . .
解決方法:需要安裝SQL Server 2008 Native Client ODBC Driver,下載安裝檔sqlncli.msi,安裝後就可以了。
以上就是php連接sql server的方法,希望對大家解決類似問題有幫助。
更多php如何連接sql server相關文章請關注PHP中文網!