[PHP] PHP 5.4 (for Windows)之後版本連接Microsoft SQL Server

Screen Shot 2013-08-26 at 12.50.45 PM  

PHP要怎麼連Microsoft SQL Server?網路上教學很多

但很多是舊版,這是新版的做法
只有Windows平台受影響

 

敝人愛用XAMPP所以就用這套講起

它好像自從其中一個版號之後…
XAMPP for Windows把原本mssql的連接方式抽掉了

只能用Native Client的連接方式

 

而其它平台則不受影響


簡單講一下差異…

Screen Shot 2013-08-26 at 8.28.07 PM  

這裡有三個流程圖…

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

Screen Shot 2013-08-26 at 1.08.39 PM  

這就看你的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來說

Screen Shot 2013-08-26 at 1.16.48 PM  

我的圖面上很清楚看到的是php 5.4

然後比照php資料夾裡的dll是Thread Safe 還是 non-Thread Safe的版本

 

Screen Shot 2013-08-26 at 1.11.14 PM  

 

 

以我的版本XAMPP 1.8.2 for Windows來說

我在C:xamppphp裡面

找不到php5.dll但有php5ts.dll

所以我知道我的版本是Thread Safe版本

SQLSRV30.EXE檔案,用7-zip等程式直接解壓縮(本身執行檔是壞的,不用在雙點了)

就會得到

php_sqlsrv_54_ts.dll

php_pdo_sqlsrv_54_ts.dll

這二個檔案

 

把它複製到C:xamppphpext 裡面

然後手動在php.ini裡面加上

extension=php_sqlsrv_54_ts.dll

extension=php_pdo_sqlsrv_54_ts.dll

然後重開Apache

—————–

看phpinfo(),找sqlsrv就會看到類似以下畫面

Screen Shot 2013-08-26 at 12.49.33 PM  

就完成了

 

因為模組有變更,程式碼也變更

所以以下這段在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"; //serverNameinstanceName
$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

 

在〈[PHP] PHP 5.4 (for Windows)之後版本連接Microsoft SQL Server〉中有 3 則留言

  1. 求救啊!
    我成功連接了,但不能在php 上update database, 因為我其中的資料是store 中文字,當我在php run 那句sql是沒有反應,但在management studio run 就成功,但column datatype 無誤啊,是nvarchar, 中文字亦有加"N"

留言功能已關閉。