開篇
因為畢設老師需求的原因,虛擬旅遊網站要求的資料庫必須使用MS SQL server。
我最擅長的web程式設計語言是PHP,但是在PHP中連結MS SQL server是一件非常麻煩的事,我個人分析造成這種麻煩的原因:是因為使用PHP的一大優點就是免費,然而MS SQL server雖然圖形化介面操作起來簡單,但是其昂貴的授權費讓人望而卻步;加之MySQL不俗的效能和強大的社區支援,使得真正企業環境裡,使用PHP + MS SQL server的人越來越少。
其實縱觀網上的文章,之所以有人選擇這樣的組合(PHP + MS SQL server)是因為系統的遺留問題。比如php程式員要求在某企業網站上進行二次開發,或者企業原來就是用的MS SQL server資料庫。總之,我經過十二小時的奮戰,終於通訊成功,現在把過程和經驗記錄如下。
1. 安裝MS SQL server2008 express資料庫
安裝的過程比較簡單。但是必須記住一點問題,安裝時我們設定的??或者說是我們預設的??資料庫執行個體名。
1.1 資料庫預設的執行個體名
以MS SQL server2008 express為例,一般預設的執行個體名是 SQLEXPRESS。而我自行設定的是SQLSERVER,也就是sql server。
1.2 設定資料庫的登陸方式
我們一定要給sa使用者佈建一個密碼,以便我們將來編寫程式訪問資料庫時的方便。我個人設定的密碼是”6個1“。
2. 登入資料庫
利用管理工具:SQL Server Management Studio,登陸資料庫進行管理。1。
圖1 登陸MS SQL server2008資料庫
2.1登陸時的會遇到的問題
登入時我遇到了問題,2。
圖2 登陸時遇到的問題
錯誤資訊如下:
在與 SQL Server 建立串連時出現與網路相關的或特定於執行個體的錯誤。未找到或無法訪問伺服器。請驗證執行個體名稱是否正確並且 SQL Server 已配置為允許遠端連線。 (provider: 具名管道提供者, error: 40 - 無法開啟到 SQL Server 的串連) (Microsoft SQL Server,錯誤: 53)
2.2 問題的解決方案
在我百度了一些解決方案以後,我瞭解到,伺服器名稱不能填寫預設的:(local)。應該以這樣的格式來填寫:電腦名稱\執行個體名稱。以我個人為例,3。
圖3 正確的登陸填寫
既然能登陸到資料庫,就說明我們的安裝是沒有問題的。下面我們進行一些關於PHP的設定。
3 為PHP準備適當的庫檔案
PHP5.3以後,其串連資料庫的原生代碼是由Microsoft團隊來維護的。我們需要的庫檔案(在windows下是.dll檔案)在PHP的源碼包裡是沒有的,所以我們需要另行下載。
參照PHP官方文檔是最好的選擇。
http://php.net/manual/zh/book.sqlsrv.php
3.1 下載並安裝Microsoft SQL Server 2012 Native Client
說句題外話,這一步是我在寫部落格時,閱讀PHP manual中才得知的。怪不得我第一遍在操作時,碰到了php報錯,中文大意就是“本機沒有安裝Microsoft SQL Server 2012 Native Client”。開來英文好,能閱讀官方文檔是王道啊!
下載Microsoft SQL Server 2012 Native Client的網址如下:
http://php.net/manual/zh/sqlsrv.requirements.php
3.2 下載適當的Microsoft SQL Server Driver for PHP
由官方文檔我們可以得知,對應於PHP5.3.x的適用程式是SQLSRV 3.0。下載網址如下:
http://www.microsoft.com/en-us/download/details.aspx?id=20098
3.3 選擇適當的庫檔案
根據官方文檔,我們把3.2步驟中下載的程式??SQLSRV30.EXE??解壓縮以後,會得到8個驅動檔案(驅動檔案以.dll為結尾)。4。
圖4 SQLSRV30.EXE解壓縮展開之後
根據官方文檔,php5.3安全執行緒版本應選擇 php_pdo_sqlsrv_53_ts.dll 和 php_sqlsrv_53_ts.dll兩個檔案,放置在php根目錄下的ext檔案夾下。例如,在我的機器中,路徑是D:\lamp\php5\ext。
3.4 怎麼樣得知自己的php是否安全執行緒
在phpinfo中,我們查看這樣的一條資訊。5。
圖5 phpinfo輸出資訊
“enable”表示該php是安全執行緒版本的反之就是非安全執行緒。
4. 配置php.ini檔案
關於php.ini檔案的配置,完全可以參照如下的網址。
http://msdn.microsoft.com/en-us/library/cc296203(v=sql.105).aspx
4.1 使php載入SQLSRV驅動
在php.ini的拓展模組載入區??檔案中extension那塊位置,填寫如下配置,使php預設載入SQLSRV 驅動。
extension=php_sqlsrv_53_ts.dll
4.2 使php載入PDO_SQLSRV驅動
在與4.1中同樣的位置,填寫如下配置。
extension=php_pdo_sqlsrv_53_ts.dll
為了使php開啟pdo驅動,我們還要開啟pdo驅動。
extension=php_pdo.dll
4.3驗證pdo_sqlsrv是否載入成功
在phpinfo中看到畫黃線的單詞,表示載入成功。6所示。
圖6 phpinfo的輸出
5. 在php運行時動態載入
我也是現在才知道,php還有這樣的神奇功能,讓我們暫時注釋掉php設定檔裡給你剛剛寫好的配置,試一下動態載入的功能。
根據官方文檔,dl()這個函數在php5.3被廢除了。我因此無法進行測試。
但是微軟官方的php代碼如下:
dl('php_pdo_sqlsrv_53_ts.dll');
6. 注意事項
在MS SQL server中,資料表能名稱不能叫user,因為有個系統資料表的名稱就是user!