在做數(shù)據(jù)對(duì)接時(shí)難免會(huì)遇到跨庫(kù)查詢,例如,做購(gòu)物商城時(shí)就涉及到庫(kù)存查詢,所以就要與實(shí)際庫(kù)存軟件對(duì)接,若是同一類數(shù)據(jù)那就好辦,互聯(lián)網(wǎng)程序大多都是用PHP開發(fā),通常是結(jié)合MYSQL數(shù)據(jù)。但中小型庫(kù)存軟件大多都是用 microsoft SQL server 在此由南昌網(wǎng)站建設(shè)公司百恒網(wǎng)絡(luò)技術(shù)工程師向大家介紹PHP連接SQL server 服務(wù)器環(huán)境配置及注意事項(xiàng)。
在早期我們使用PHP自帶的php_mssql.dll,但PHP升級(jí)到PHP5.3以上,就不再支持該庫(kù)了,大家也不用擔(dān)心,現(xiàn)在只要在服務(wù)器上安裝相應(yīng)的擴(kuò)展即可以解決該問題,即使PHP版是5.2 也是沒問題的。微軟專門為PHP出了個(gè)SQL Server的擴(kuò)展(Windows版本的),對(duì)于Windows下使用php開發(fā)SQL Server應(yīng)用來說,這個(gè)擴(kuò)展有利于利用SQL Server來開發(fā)php平臺(tái)連接sql server數(shù)據(jù)庫(kù)管理系統(tǒng)。
1.找到PHP版本相對(duì)應(yīng)的組件并在PHP.ini中進(jìn)行擴(kuò)展。接下來詳細(xì)介紹
先到微軟網(wǎng)站下載 SQL Server Driver for PHP,鏈接地址:http://www.microsoft.com/en-us/download/details.aspx?id=20098,你也可以在百度搜SQLSRV20 下載,選擇你認(rèn)為安全的下載地址進(jìn)行下載,百恒網(wǎng)絡(luò)技術(shù)工程師建議到微軟的官網(wǎng)下載。對(duì)服務(wù)器環(huán)境配置應(yīng)該謹(jǐn)慎行事,同時(shí)注意下SQLSRV20 后面的數(shù)值,表對(duì)應(yīng)不同版本。例如,20對(duì)應(yīng)的就是5.2.x 或 5.3.x版本的,下載后該文件是一個(gè).exe的壓縮包,解壓后即可以看到。
更高版本的PHP擴(kuò)展文件
順便介紹下:
其中的52、53表示就是php的5.2.x和5.3.x 版本,選擇跟你php版本相匹配的;
選擇vc6或vc9的主要看你使用的是什么web服務(wù)器軟件,如果使用的是IIS那就選擇vc9的,如果是Apache則選擇vc6的.
至于ts和nts,就要看你安裝的php版本是線程安全版的還是非線程安全版,ts是線程安全,nts是非線程安全.
如何查看是線程還是非線程通過phpinfo(); 查看其中的 Thread Safety 項(xiàng),這個(gè)項(xiàng)目就是查看是否是線程安全,如果是:enabled,一般來說應(yīng)該是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或Apache接下來運(yùn)行phpinfo()就可以看到如圖所示,表示PHP環(huán)境配置好了,接下來配置SQL server 數(shù)據(jù)查詢相關(guān)驅(qū)動(dòng)。
2.安裝sqlncli.msi(SQL Server Native Client),需要注意合適的版本及位數(shù),有的是64位的,有的是32位的,支持SQL server 版本也不一樣,2005、2008、2012等。下載地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=15748
關(guān)于數(shù)據(jù)庫(kù)訪問及數(shù)據(jù)讀取,php有份用戶手冊(cè),里面比較詳細(xì),可以查閱,地址:http://php.net/manual/zh/book.sqlsrv.php
實(shí)例代碼,如下:
/* 數(shù)據(jù)庫(kù)連接 */
$serverName = "serverNamesqlexpress";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true ));
}
if ( sqlsrv_begin_transaction( $conn ) === false ) {
die( print_r( sqlsrv_errors(), true ));
}
/* 初始化參數(shù) */
$orderId = 1; $qty = 10; $productId = 100;
/* 插入數(shù)據(jù) */
$sql1 = "INSERT INTO OrdersTable (ID, Quantity, ProductID)
VALUES (?, ?, ?)";
$params1 = array( $orderId, $qty, $productId );
$stmt1 = sqlsrv_query( $conn, $sql1, $params1 );
/* 更新數(shù)據(jù) */
$sql2 = "UPDATE InventoryTable
SET Quantity = (Quantity - ?)
WHERE ProductID = ?";
$params2 = array($qty, $productId);
$stmt2 = sqlsrv_query( $conn, $sql2, $params2 );
/* If both queries were successful, commit the transaction. */
/* Otherwise, rollback the transaction. */
if( $stmt1 && $stmt2 ) {
sqlsrv_commit( $conn );
echo "Transaction committed.
";
} else {
sqlsrv_rollback( $conn );
echo "Transaction rolled back.
";
}
?>
以上操作步驟是百恒網(wǎng)絡(luò)技術(shù)工程師實(shí)際操作經(jīng)驗(yàn),希望此文對(duì)廣大站長(zhǎng)有所幫助。
專業(yè)專注于南昌網(wǎng)站設(shè)計(jì),為用戶提供高品質(zhì)的網(wǎng)絡(luò)產(chǎn)品和優(yōu)質(zhì)的服務(wù)是我們始終追求的目標(biāo)!