PHP連接SQL Server 2005 和 SQL Server 2008

一環境配置:

  因爲我自己機器是Windows 2008 + SQL Server 2008,所以我在使用的時候連接的是SQL Server 2008,後來發現基本功能兩個版本區別不大,因爲三方驅動都是微軟提供的。需要說明的是,在PHP配置文件,即原生的php.ini裏面需要修改一點東西,我沒有嘗試過去掉下邊的註釋是否可以訪問05和08的數據庫:

;extension=php_mssql.dll

  我查閱了網上很多資料,這個PHP擴展是提供給SQL Server 2000用的,SQL   Server 2005和 SQL Server 2008需要到微軟官方去下載新的驅動,下載地址如下:


  官方文檔有描述:

  In its continued commitment to interoperability, Microsoft has released an updated SQL Server Driver for PHP. The SQL Server Driver for PHP download is available to all SQL Server users at no additional charge. The SQL Server Driver for PHP is a PHP 5 extension that allows for the reading and writing of SQL Server data from within PHP scripts. The extension provides a procedural interface for accessing data in all editions of SQL Server 2005 and SQL Server 2008.

  根據官方文檔的描述,微軟提供的Driver是同時提供給SQL Server 2005和SQL Server 2008兩個版本使用的。所以整體的環境配置步驟如下:

1)下載驅動(上邊有鏈接地址)下載過後的驅動包裏面的內容如下圖:
   
    可以在百度上搜 php_sqlsvr_ts.dll 和 php_sqlsvr.dll 兩個文件,如果下不到,也可以聯繫我:QQ:104689080 或 email:[email protected] .

2)拷貝驅動到相應的位置:

  在Windows操作系統上配置過PHP環境的人應該都清楚,配置的時候若需要配置一個PHP的擴展,此擴展需要將相關的dll文件全部複製到PHP的擴展目錄裏面,然後通過修改php.ini來實現PHP的擴展,在php.ini裏面需要指明擴展路徑,一般情況是在最末尾添加一行:

extension_dir=""

  ""內的內容填寫PHP的擴展目錄名,約定俗成一般是放在PHP目錄下的一個ext文件夾內,當然可以將目錄配置到任何地方(沒有測試過)。把上圖解壓開的dll文件拷貝到extension_dir設置的擴展目錄裏面。

3)修改php.ini實現擴展:

  在php.ini的一大堆;extension=**.dll格式裏面添加兩行,此部分位於以下注釋下邊一般:

; Windows Extensions

; Note that ODBC support is built in, so no dll is needed for it.

; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5)

; extension folders as well as the separate PECL DLL download (PHP 5).

; Be sure to appropriately set the extension_dir directive.

  添加的兩行內容爲:

extension=php_sqlsrv_ts.dll

extension=php_sqlsrv.dll

  注意=號右邊是解開過後的擴展的兩個驅動的文件名,必須保證此文件在配置好的擴展目錄內,而且需要注意此處最初不需要帶“;”。【*:在php.ini文件裏面,首部分號的含義代表行註釋,如果有分號的時候,服務器在讀取配置的時候會略過分號這一行不去讀取相關內容,只有沒有加分號的行纔會被服務器讀取。】

  這裏解釋一下,兩個驅動程序的區別在於,php_sqlsrv_ts.dll是線程安全的驅動,如果服務器本身的環境是使用的php5ts.dll,就是用這個驅動;php_sqlsrv.dll不是線程 安全的,這種情況下,服務器運行PHP應該加載的是php5.dll

4)測試配置環境:

  整個過程操作好了過後,寫一個test.php測試一下配置的相關環境,測試代碼如下:

<?php

phpinfo();

?>
  這裏列舉一下開發環境,以防出現不同環境有差異的地方:

OS:Windows Server 2008   x64 Enterprise Edition

WebServer:Apache 2.2.11

Database:SQL Server 2008   x64 Enterprise Edition

PHP:5.2.9

  (*:在配置PHP環境的時候,如果是解壓縮的版本,在Windows平臺上需要拷貝PHP根目錄下所有的DLL文件到Windows的目錄裏面,需要說明的是:Windows 32位系統的目標目錄爲:$:/Windows/System32,Windows 64位環境的目標目錄爲:$:/Windows/SysWOW64,這裏$符號代表安裝操作系統的盤符號。而且本文的Driver好像運行的最低PHP版本應該爲5.2.6,官方文檔裏面說的測試版本是使用的PHP5.2.6,至於低版本是否可以運行,我沒有測試。)

二連接數據庫:

  使用過SQL Server的人應該都清楚,SQL Server常用的有兩種認證方式,一種是本地系統賬戶認證(Windows Authentication ),一種是使用用戶名和密碼(SQL Server Authentication ),第二種認證方式必須啓用SQL Server的混合模式。

  1.Windows Authentication連接部分代碼段:

<?php

$serverName = "(local)";

$connectionInfo = array("Database"=>"TestingInfo","ConnectionPooling"=>false);

$conn = sqlsrv_connect( $serverName,$connectionInfo);

if( $conn == false)

{

echo "連接失敗!";

die( print_r( sqlsrv_errors(), true));

}

?>

  2.SQL Server Authentication連接部分代碼段:

<?php

$serverName = "(local)";

$uid = "sa";

$pwd = "******";

$connectionInfo =   array("UID"=>$uid,"PWD"=>$pwd,"Database"=>"TestingInfo");

$conn = sqlsrv_connect( $serverName,$connectionInfo);

if( $conn == false)

{

echo "連接失敗!";

die( print_r( sqlsrv_errors(), true));

}

?>

  參考官方提供的英文原文檔,針對參數$connectionInfo做一個簡單說明,因爲$connectionInfo是一個Hash表結構,下邊參數格式爲:

Key[DataType]:

Description(Default Value):鍵[數據類型]:描述(默認值)

【1】APP[String類型]:

使用的應用程序名稱【*:我自己不太懂得這個地方的意義,不好意思】(沒有默認值)

【2】ConnectionPooling[1或true爲打開連接池,0或false爲關閉連接池]:

用來設置是否打開SQL Server的連接池功能(默認值爲true(1))

【3】Database[String類型]:

連接的數據庫的名稱,所有連接提供的數據庫名稱類似ASP.NET裏面web.config的連接字符串裏面的數據庫實例名,如果設置了Database的連接屬性,驅動會默認使用SQL Server支持的Transact-SQL腳本來操作所有提供的數據庫實例,包括添加、刪除、查詢、修改等各種操作(默認爲登陸的操作系統裏面的數據庫,我沒有測試過,應該是直接運行程序的(local))

【4】Encrypt[1或true爲執行加密,0或false爲不執行加密]:

設置是否對傳入服務器的SQL腳本執行加密操作,當然如果使用加密操作會對系統性能存在一定影響,不過影響不明顯(默認爲false(0))

【5】Failover_Partner[String類型]:

提供一個服務器鏡像,此屬性應該是用於主服務器Down掉的情況,當主服務器Down掉的時候,提供一個備份的數據庫和服務器的實例鏡像作爲備份的服務器處理。(未設置默認值)

【6】LoginTimeout[Integer類型]:

提供連接的超時時間,時間單位爲秒。(未設置)

【7】PWD[String類型]:

當使用SQL Server Authentication認證方式的時候需要提供該屬性,該屬性爲登陸用戶的密碼。(未設置任何值)

【8】QuotedId[1或true就是用SQL-92標準,0或false就是用遺留的標準]:

設置使用SQL腳本的標準是使用SQL-92標準還是使用遺留的Transact-SQL標準。(默認值爲true(1))

【9】TraceFile[String類型]:

此屬性主要爲監控數據使用,可用於調試或者維護,它的值爲一個路徑,SQL Server會將所有的數據執行操作寫入該路徑,至於具體內容是什麼,我沒有使用過。(未設置默認值)

【10】TraceOn[1或true打開監控,0或false關閉監控]:

是否打開ODBC連接方式的監控。(默認值false(0))

【11】TransactionIsolation[常量值]:

提供數據庫的事務級別(SQLSRV_TXN_READ_COMMITTED)

常量值包括

SQLSRV_TXN_READ_UNCOMMITTED,

SQLSRV_TXN_READ_COMMITTED,

SQLSRV_TXN_REPEATABLE_READ,

SQLSRV_TXN_SNAPSHOT,

SQLSRV_TXN_SERIALIZABLE

【12】TrustServerCertificate[1或true設置爲客戶端限制,0或false設置爲客戶端不限制]:

如果設置爲 true,則使用 SSL 對通道進行加密,但不通過證書鏈對可信度進行驗證。如果將TrustServerCertificate 設置爲 true 並將 Encrypt 設置爲 false,則不對通道進行加密。可識別的值爲 true、false、yes 和 no。有關更多信息,請參見 SQL Server 2005 Books Online(《SQL Server 2005 聯機叢書》)中的“Encryption Hierarchy”(加密層次結構)和“Using Encryption Without Validation”(使用不驗證的加密)。(默認值:false(0))

【13】UID[String類型]:

當使用SQL Server Authentication認證方式的時候需要提供該屬性,該屬性爲登陸用戶的用戶名。(未設置任何值)

【14】WSID[String類型]:

監控計算機名稱,此屬性很少用。(未設置任何值)

 

以下爲微軟的示例代碼:

<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
     echo "Could not connect./n";
     die( print_r( sqlsrv_errors(), true));
}

/* Set up and execute the query. */
$tsql = "SELECT FirstName, LastName FROM Person.Contact WHERE LastName='Alan'";
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false)
{
     echo "Error in query preparation/execution./n";
     die( print_r( sqlsrv_errors(), true));
}

/* Retrieve each row as an associative array and display the results.*/
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{
      echo $row['LastName'].", ".$row['FirstName']."/n";
}

/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>

參考鏈接:

http://technet.microsoft.com/zh-cn/library/cc296174(SQL.90).aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章