PHP連接Microsoft SQL Server 2000/2005/2008

PHP連接Microsoft SQL Server 2000/2005/2008




最近由於工作需要用於SQL Server,想做一個測試環境,SQL Server 2008不是剛出來,圖個新鮮,就下載了2008版的,用了很多方法一直沒能連接上SQL Server 2008。在網上找了一些資料,終於連接上了SQL Server 2008,整理了一下收集到的資料,利用中午休息時間,寫個貼子發出來,讓大家看看。呵呵!!






PHP自帶的MSSQL擴展php_mssql.dll原來是給SQL Server 2000用的,難怪連接不上2008?! -_-!!要使用SQL Server 2005以上版本,就要用到微軟爲PHP提供的最新第三方擴展SQL Server Driver for PHP纔行,最新版本是2.0的,下載地址:






SQL Server Driver for PHP 1.1 (2009-10)


http://www.microsoft.com/downloads/details.aspx?familyid=CCDF728B-1EA0-48A8-A84A-5052214CAAD9&displaylang=en


SQL Server Driver for PHP 2.0 CTP1(2010-04)


http://www.microsoft.com/downloads/details.aspx?familyid=DF4D9CC9-459C-4D75-A503-AE3FCEB85860&displaylang=en


或者:http://www.microsoft.com/sqlserver/2005/en/us/PHP-Driver.aspx

想看中文詳細使用資料可參考MSDN的,地址:


http://msdn.microsoft.com/zh-cn/library/cc296170(SQL.90).aspx








先來複習一下怎麼樣用PHP自帶的擴展php_mssql.dll連接SQL Server 2000,用mssql系列函數來操作,和操作MySQL的一樣。


1、打開PHP配置文件php.ini,找到;extension=php_mssql.dll把前面的分號去掉。


2、找到mssql.secure_connection = Off修改成 mssql.secure_connection = On。


3、把PHP文件夾下的php_mssql.dll和ntwdblib.DLL這兩個文件拷貝到C:\windows\system32\文件夾下。


4、重啓Apache,OK



測試一下:








<?php


//用mssql_connect


$conn=mssql_connect('localhost','pandao','1987') or die('數據庫連接不上');


mssql_select_db('test',$conn);


//query語句


$Query="select * from news";


$AdminResult=mssql_query($Query);


//輸出結果


$Num=mssql_num_rows($AdminResult);


for($i=0;$i<$Num;$i++)


{


$Row=mssql_fetch_array($AdminResult);


echo($Row[1]);


echo("<br/>");


}


?>
複製代碼


當然還可以用pdo和ODBC來連接SQL Server。








準備工作








下載驅動程序,我下載的是2.0的,下載後安裝釋放程序,裏面有以下文件:


php_pdo_sqlsrv_52_nts.dll


php_pdo_sqlsrv_52_ts.dll


php_pdo_sqlsrv_53_nts_vc6.dll


php_pdo_sqlsrv_53_nts_vc9.dll


php_pdo_sqlsrv_53_ts_vc6.dll


php_pdo_sqlsrv_53_ts_vc9.dll


php_sqlsrv_52_nts.dll


php_sqlsrv_52_ts.dll


php_sqlsrv_53_nts_vc6.dll


php_sqlsrv_53_nts_vc9.dll


php_sqlsrv_53_ts_vc6.dll


php_sqlsrv_53_ts_vc9.dll


SQLServerDriverForPHP.chm(手冊,英文夠好的話,可以看看,嘿嘿)


SQLServerDriverForPHP_License.rtf


SQLServerDriverForPHP_Readme.htm(自述文件)






下面是自述文件裏的內容,我翻譯一下:






驅動程序文件
 PHP 版本
 線程安全性
 用於PHP .dll
 
php_sqlsrv_53_nts_vc6.dll


php_pdo_sqlsrv_53_nts_vc6.dll
 5.3
 no
 php5.dll
 
php_sqlsrv_53_nts_vc9.dll


php_pdo_sqlsrv_53_nts_vc9.dll
 5.3
 no
 php5.dll
 
php_sqlsrv_53_ts_vc6.dll


php_pdo_sqlsrv_53_ts_vc6.dll
 5.3
 yes
 php5ts.dll
 
php_sqlsrv_53_ts_vc9.dll


php_pdo_sqlsrv_53_ts_vc9.dll
 5.3
 yes
 php5ts.dll
 
php_sqlsrv_52_nts.dll


php_pdo_sqlsrv_52_nts.dll
 5.2
 no
 php5.dll
 
php_sqlsrv_52_ts.dll


php_pdo_sqlsrv_52_ts.dll
 5.2
 yes
 php5ts.dll
 






關於VC6和VC9的區別,還有非線程安全與線程安全






VC6 版本是使用 Visual Studio 6 編譯器編譯的,如果你是在windows下使用Apache+PHP的,請選擇VC6版本。


VC9 版本是使用 Visual Studio 2008 編譯器編譯的,如果你是在windows下使用IIS+PHP的,請選擇VC9版本。


Non Thread Safe就是非線程安全,在執行時不進行線程(Thread)安全檢查;


Thread Safe 是線程安全,執行時會進行線程(Thread)安全檢查,以防止有新要求就啓動新線程的 CGI 執行方式而耗盡系統資源;








開始配置








我用的是APMserv 搭建的PHP環境(Apache 2.2.9+PHP 5.2.6+MySQL 5.1.28),想用線程安全的,所以選擇php_sqlsrv_52_ts.dll和php_pdo_sqlsrv_52_ts.dll。


開始工作,先把文件拷貝到PHP文件夾下的ext目錄下,然後在配置文件php.ini
的Extensions後面加上:


;extension=php_sqlsrv_52_ts.dll


;extension=php_pdo_sqlsrv_52_ts.dll


再重啓Apache。


最後測試一下是否成功,看一下phpinfo的sqlsrv


  


下載 (16.53 KB)
sqlsrv


2010-6-5 13:13






如圖所示這樣就表示連接成功了!!開始工作嘍!






連接數據庫






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






1.Windows Authentication連接部分代碼段












<?php


$serverName = "(local)";


$connectionInfo = array("Database"=>"test","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 = "pandao"; //數據庫用戶名


$pwd = "1987"; //數據庫密碼


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


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


if( $conn == false)


{


    echo "連接失敗!";


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


}


$query = sqlsrv_query($conn, "SELECT TOP 10 nid,title,content FROM test.dbo.news");


while($row = sqlsrv_fetch_array($query)){


    echo $row['nid']."-----".$row['title']."<br/>";


}


?>
複製代碼






由於我電腦沒裝SQL Server 2005,所以沒有測試,SQL Server Driver for PHP是給2005和2008用的,應該是一樣的,大家在時間可以測試一下,看是不是一樣。


微軟爲PHP新增加了操作SQL Server 2005/2008的函數sqlsrv系列,下面是sqlsrv API,用法跟操作MySQL的基本一樣,可以參考學習一下。


在PHPchina混了N久了,還是第一次在PHPchina發原創貼,在下文筆不行,寫得不好,歡迎大家拍磚!


相關參考文章:


微軟提供給PHP5的SQL Server擴展: sqlsrv (轉載)


PHP連接SQL Server 2005 和 SQL Server 2008








API 參考 (SQL Server Driver for PHP) 








用於 SQL Server Driver for PHP 的 API 名稱是 sqlsrv。所有 sqlsrv函數都以 sqlsrv_打頭,後跟動詞或名詞。後跟動詞的函數用於執行特定操作,而後跟名詞的函數用於返回特定形式的元數據。


SQL Server Driver for PHP 包含以下函數:






函數 說明 
sqlsrv_begin_transaction 開始事務。 
sqlsrv_cancel 取消語句;並放棄相應語句的所有未決結果。 
sqlsrv_client_info 提供有關客戶端的信息。 
sqlsrv_close 關閉連接。釋放與相應連接關聯的所有資源。 
sqlsrv_commit 提交事務。 
sqlsrv_configure 更改錯誤處理和日誌記錄配置。 
sqlsrv_connect 創建一個連接,並將其打開。 
sqlsrv_errors 返回關於上一操作的錯誤和/或警告信息。 
sqlsrv_execute 執行預定義語句。 
sqlsrv_fetch 使下一行的數據可供讀取。 
sqlsrv_fetch_array 以數值索引數組、關聯數組或這兩種數組的形式檢索下一行的數據。 
sqlsrv_fetch_object 以對象形式檢索下一行的數據。 
sqlsrv_field_metadata 返回字段元數據。 
sqlsrv_free_stmt 關閉語句。釋放與相應語句關聯的所有資源。 
sqlsrv_get_config 返回指定配置設置的值。 
sqlsrv_get_field 按索引檢索當前行中的字段。可以指定 PHP 返回類型。 
sqlsrv_has_rows 檢測結果集是否具有一行或多行。 
sqlsrv_next_result 使下一結果可供處理。 
sqlsrv_num_rows 報告結果集中的行數。 
sqlsrv_num_fields 檢索活動結果集中的字段數。 
sqlsrv_prepare 準備 Transact-SQL 查詢,但不執行該查詢。隱式綁定參數。 
sqlsrv_query 準備 Transact-SQL 查詢,並將其執行。 
sqlsrv_rollback 回滾事務。 
sqlsrv_rows_affected 返回有所修改的行的數目。 
sqlsrv_send_stream_data 在每次調用函數時向服務器發送最多八千字節 (8 KB) 的數據。 
sqlsrv_server_info 提供有關服務器的信息。 

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