PHP 5.3.x連接SQL Server 2005的教程

2013-01-30 23:50:34來源:新豬豬作者:

php5.3.x不再支持php_mssql.dll 拓展庫了,及時(shí)使用php5.2.x中的php_mssql.dll 也無法使用。 微軟專門為PHP出了個(gè)SQL Server的擴(kuò)展(Windows版本的),對于Windows下使用php開發(fā)SQL Server應(yīng)用來說,這個(gè)擴(kuò)展有利于

php5.3.x不再支持php_mssql.dll 拓展庫了,及時(shí)使用php5.2.x中的php_mssql.dll 也無法使用。 微軟專門為PHP出了個(gè)SQL Server的擴(kuò)展(Windows版本的),對于Windows下使用php開發(fā)SQL Server應(yīng)用來說,這個(gè)擴(kuò)展有利于利用SQL Server來開發(fā)php平臺連接sql server數(shù)據(jù)庫管理系統(tǒng)。

PHP5.2.x本身有個(gè)php_mssql.dll的擴(kuò)展用來連接Sql server,但是貌似這個(gè)dll只是用來連接低版本 Sql server的(2000以下版本),在Sql server 
2005及以上版本則根本無法使用mssql_connect連接到數(shù)據(jù)庫。

先到微軟網(wǎng)站下載 SQL Server Driver for PHP :http://www.microsoft.com/downloads/details.aspx?familyid=CCDF728B-1EA0-48A8-A84A-5052214CAAD9&displaylang=en , 這是一個(gè)自解壓的EXE文件,解壓縮后你會得到這么幾個(gè)文件:

\

其中的52、53表示就是php的5.2.x和5.3.x 版本,選擇跟你php版本相匹配的;選擇vc6或vc9的主要看你使用的是什么web服務(wù)器軟件,如果使用的是IIS那就選擇vc9的,如果是Apache則選擇vc6的至于ts和nts,就要看你安裝的php版本是線程安全版的還是非線程安全版,ts是線程安全,nts是非線程安全比如我的配置是IIS FastCgi php-5.3.2-nts-Win32-VC9-x86,那么就應(yīng)該選擇php_sqlsrv_53_nts_vc9.dll 文件并把它放到php安裝目錄的ext目錄下,并在php.ini中添加 extension=php_sqlsrv_53_nts_vc9.dll 接下來重新啟動IIS 并運(yùn)行phpinfo.php,來查看phpinfo的配置信息,如果看到下圖信息,則說明可添加成功,您的php5.3.x可以鏈接sql server了。

\

另外注意的是,如果使用這個(gè)擴(kuò)展連接Sql server 2005以上版本的sql server(如sql server 2008),你還需要在機(jī)器上先安裝 SQL Server Native Client :http://download.microsoft.com/download/0/E/6/0E67502A-22B4-4C47-92D3-0D223F117190/sqlncli.msi

這個(gè)擴(kuò)展為php新增了一系列sqlsrv_開頭的函數(shù),函數(shù)參考如下:

  • 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_fetch_metadata
  • sqlsrv_free_stmt
  • sqlsrv_get_config
  • sqlsrv_get_field
  • sqlsrv_has_rows
  • sqlsrv_next_result
  • sqlsrv_num_fields
  • sqlsrv_num_rows
  • sqlsrv_prepare
  • sqlsrv_query
  • sqlsrv_rollback
  • sqlsrv_rows_affected
  • sqlsrv_send_stream_data
  • sqlsrv_server_info

更多詳細(xì)的說明可以在剛才的自解壓的文件中有個(gè) SQLServerDriverForPHP.chm 幫助文件中可以找到打開后點(diǎn)擊API Reference節(jié)點(diǎn)點(diǎn)擊Example Application 節(jié)點(diǎn)可以看到php程序范例。是不是很簡單?跟平時(shí)用的mysql、mssql函數(shù)差不多的。

我在用到了php_pdo_sqlsrv_53_ts_vc9.dllphp_sqlsrv_53_ts_vc9.dll 這2個(gè)文件

測試示例如下:

$serverName = "(local)\sqlexpress";
$connectionOptions = array("UID"=>"sa","PWD"=>"abc123","Database"=>"數(shù)據(jù)庫名");
$conn = sqlsrv_connect( $serverName, $connectionOptions);
if( $conn === false ){
  die('不能打開連接');
 }
$tsql = "SELECT TOP 3 * FROM Company";//注意,這里是mssql,不能用limit
$cursorType = array("Scrollable" => SQLSRV_CURSOR_KEYSET);
$result = sqlsrv_query($conn, $tsql, $params, $cursorType);
if ( $result === false){
 print_r(sqlsrv_errors());exit;
}

if(sqlsrv_has_rows($result))
{
 $rowCount = sqlsrv_num_rows($result);
 while( $row = sqlsrv_fetch_array( $result, SQLSRV_FETCH_ASSOC))
 {
  echo iconv("gb2312",   "utf-8", $row['Name']) ;//連接的mssql數(shù)據(jù)庫肯定是中文的,需要轉(zhuǎn)碼

 }
}
else
{
 echo '沒有數(shù)據(jù)';
}

關(guān)鍵詞:PHPSQLServer

贊助商鏈接: