PHP要怎麼連Microsoft SQL Server?網路上教學很多
但很多是舊版,這是新版的做法
只有Windows平台受影響
敝人愛用XAMPP所以就用這套講起
它好像自從其中一個版號之後...
XAMPP for Windows把原本mssql的連接方式抽掉了
只能用Native Client的連接方式
而其它平台則不受影響
-------
簡單講一下差異...
這裡有三個流程圖...
Mac / Linux 是看最右邊的方式,底層採用FreeTDS連接SQL Server
Windows則有二種方式連接,中間的是舊版做法,左邊的是新版做法
簡單來說...就是換Library了啦!
SQLSRV的話,是微軟提供&維護的Driver,
在Microsoft官網有完整的API Reference
http://msdn.microsoft.com/en-us/library/cc296152.aspx
當然,php官方也Mirror了一份
http://php.net/manual/en/book.sqlsrv.php
所以這篇,主要教怎做這個更換Library的動作
-------
剛開始,你在Configure Command裡面看到類似 "--without-mssql" "--without-pdo-mssql"的字眼就不要太緊張
因為它換模組名稱了
-------
敝人愛用XAMPP所以就用這套講起
首先你需要裝一個Native Client
依照這個網址指示
http://msdn.microsoft.com/en-us/library/cc296170.aspx
這就看你的SQL Server版本不同平台不同裝不一樣的
我的話,用Microsoft SQL Server 2008,系統是64位元的
所以裝這個
http://go.microsoft.com/fwlink/?LinkID=188401&clcid=0x409
(它有特別提到,系統如果是64位元的SQL Server就一定要裝64位元的)
----------------
到這網址
http://www.microsoft.com/en-us/download/details.aspx?id=20098
抓檔案
但這也要看PHP版本,以我的版本XAMPP 1.8.2 for Windows來說
我的圖面上很清楚看到的是php 5.4
然後比照php資料夾裡的dll是Thread Safe 還是 non-Thread Safe的版本
以我的版本XAMPP 1.8.2 for Windows來說
我在C:\xampp\php\裡面
找不到php5.dll但有php5ts.dll
所以我知道我的版本是Thread Safe版本
抓SQLSRV30.EXE檔案,用7-zip等程式直接解壓縮(本身執行檔是壞的,不用在雙點了)
就會得到
php_sqlsrv_54_ts.dll
php_pdo_sqlsrv_54_ts.dll
這二個檔案
把它複製到C:\xampp\php\ext\ 裡面
然後手動在php.ini裡面加上
extension=php_sqlsrv_54_ts.dll
extension=php_pdo_sqlsrv_54_ts.dll
然後重開Apache
-----------------
看phpinfo(),找sqlsrv就會看到類似以下畫面
就完成了
因為模組有變更,程式碼也變更
所以以下這段在Windows底下就棄用了喔(Mac / Linux的話不受影響,還是用這一段)
<?php
$conn = mssql_connect($serverName, $DBUsername, $DBPassword)
or die("Couldn't connect to SQL Server on $myServer");
if (!$conn) {
die('Something went wrong while connecting to MSSQL');
}
?>
改成新版的寫法
<?php
$serverName = "localhost"; //serverName\instanceName
$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
}
?>
網路找了個半天,終於解出來問題了
之後來測試一下連線
至於更詳細sqlsrv和mssql使用上的差異
可以參考這一篇
http://blogs.msdn.com/b/brian_swan/archive/2010/03/10/mssql-vs-sqlsrv-what-s-the-difference-part-2.aspx
--------------
參考資料:
整個模組Reference
http://php.net/manual/en/book.sqlsrv.php
http://msdn.microsoft.com/en-us/library/cc296152.aspx
安裝準備
http://msdn.microsoft.com/en-us/library/cc296170.aspx
官方的範例
http://msdn.microsoft.com/en-us/library/cc296196(v=sql.105).aspx
http://blogs.msdn.com/b/brian_swan/archive/2010/03/08/mssql-vs-sqlsrv-what-s-the-difference-part-1.aspx
http://blogs.msdn.com/b/brian_swan/archive/2010/03/10/mssql-vs-sqlsrv-what-s-the-difference-part-2.as
http://www.apachefriends.org/f/viewtopic.php?f=16&t=49670&p=191610&hilit=SQLSRV#p191610
留言列表