在 Linux 環境下使用 PHP 存取 Azure SQL Database
代貼北科大劉建昌同學撰寫之技術文章。
隨著雲端應用的普及,企業或是個人在開發應用程式時,都可藉由雲端平台上的託管服務得到高可用性以及高擴展性。Microsoft Azure 提供相當多的雲端解決方案可供客戶選擇,最常應用到的就是雲端資料庫 Azure SQL Database。Linux 用戶常遇到一個共通的問題,如何在 Linux 上以 PHP 連線到 Azure SQL Database ? 若是開發者使用 Windows Server 作業系統做為開發平台時,能夠與Azure SQL Database 完美的結合,不需要經過任何複雜配置與調整,在 Windows Server 使用 PHP 等開源程式碼時,也可以透過微軟提供的 Driver 來進行連結,但若是以 Linux 做為開發平台時,情況會較為複雜。透過本文,將介紹如何利用 FreeTDS 在 Ubuntu 環境下 PHP 連接 Azure SQL Database。TDS 是 Microsoft SQL Server 資料傳輸所使用的封包格式,過去微軟 SQL Server 透過 DB Library API 提供 C 語言使用的 CLI ( Call Level Interface ),處理 TDS 封包與網路通訊,DB Library 的歷史可以追溯到 1990 年代初期微軟公司與 Sybase 間的合作,隨著時間的演進兩家公司間的 CLI 發展也逐漸分道揚鑣 ,由於在此一時間點微軟尚未提供 Linux 版的 DB Library,因此僅能藉由開放源碼專案 FreeTDS 來達成目的,但無法對 FreeTDS 提供任何品質保證。
測試環境
Linux 作業系統版本 : Ubuntu 14.10
Web Server : Apache2
PHP 環境版本 : PHP 5.5.12-2ubuntu4.2
雲端資料庫 : Azure SQL Database
安裝 FreeTDS
1.安裝 freetds-dev , freetds-bin
附註,此為 Ubuntu 安裝方式,不同 Linux 分發版本對於 packages 管理不同,例如 CentOS 7.0 安裝 FreeTDS 方式如下:
sudo yum install wget
sudo rpm -Uvh https://mirror.oss.ou.edu/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
sudo cd /etc/yum.repos.d/
sudo wget https://rpms.famillecollet.com/enterprise/remi.repo
sudo yum install freetds
sudo yum install freetds-devel
2.利用 tsql –C 查看整個 FreeTDS 的資訊 ,以確認 FreeTDS 是否已經安裝成功。
以 tsql 測試連線是否成功
1. 在測試連線之前,要特別進入到Microsoft Azure入口網站中進行伺服器的連線設定
(將使用者的IP位址加入伺服器允許存取IP的群組中)
2. 建立Azure SQL Database 伺服器連線
TDSVER=8.0 tsql -H [ 伺服器名稱 xxxx.database.windows.net ] -p 1433 –D [ 資料庫名稱 ] -U [ 使用者帳號 ]
-P [ 使用者密碼 ]
3. 輸入 SQL 語法,測試是否可正常取得資料
在 1> 、 2> 、 3> 後輸入 SQL 指令。
輸入 go ,執行 SQL 指令
4. 資料若有顯示,代表成功連到了Azure SQL Database。某些 Linux 可能有作業系統層級的防火牆服務,請記得開啟允許 1433 TCP 通訊協定進出伺服器。
透過以上的步驟,Ubuntu Server 已經能夠和 Azure SQL Server 進行連線。
若使用者需要使用 PHP 來存取 Azure SQL Database 裡的資料,則需要再進行 PHP 程式碼的調整。由於Azure SQL Database 的連接字串專門是為一個資料庫運作,因此有些 PHP 資料庫操作 command 在連結 Azure SQL Database 時是被禁止的。例如 : 使用 MSSQL function 來建立連接字串,然後再執行 USE 指令切換到指定的資料庫。
為了解決這個限制造成的連線困難,我們可以透過 PDO driver 的 dblib,其能夠直接指定您要連接的資料庫伺服器。
設定 PDO
1. 您可以透過 phpinfo ( ) 來找到 php5 裡面的所有擴充功能的資訊
如上圖所示,在尚未設定妥 PDO 時,PDO 是無法透過 dblib 驅動程式進行資料庫連線
2. 安裝 php5-sybase
安裝 php5-sybase 的方法可以參閱 https://grover.open2space.com/content/use-php-and-pdo-connect-ms-sql-server,如下鍵入命令取得並安裝,完成後重起 Apache2 :
sudo apt-get install php5-sybase
sudo /etc/init.d/apache2 restart
完成後如上圖顯示,現在可以透過 dblib 來進行連線字串設定
3. 透過 PDO 建立連接字串,與 Azure SQL Database 進行連線
如果一切順利,網頁顯示連線成功