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.dll 和 php_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ù)';
}