PHP 連 MSSQL SERVER 之解法 (odbtp)

Standard

這是之前面試的時候的問題與事後筆記,補記一下。

PHP 直連 MSSQL 似乎會有不少編碼的問題,得用 iconv 轉個不停很麻煩。
當然也有 Microsoft 官方釋出的 SQL Server 2005 Driver for PHP 的解法,不過還是記一下 odbtp 的解法囉。

odbtp,最後更新在 2006 年,這是讓我有點擔心的事情 … 。
本來看 adodb5 也有包 odbtp 的樣子,但用 adodb5 怎麼樣都連不上,超怪。

參考網址:

從 LINUX 用 PHP 連結 Windows 2003 上面的 SQL Server 2005

SQL Server 端

請注意,odbtp 的服務 (winservice) 請安裝在 SQLServer 上哦。

  1. 解開 odbtp-1.1.4

  2. 將裡面的 winservice 資料夾複製到 C:\odbtp\

  3. 開啟命令提示字元 (cmd),用管理員權限執行

  4. 進去 winservice 目錄後,打入:

    odbtpctl install
    odbtpctl start
    

正常來說,在 Windows 的 “服務” 中就會多出 Odbtp Server 的項目。

PHP 若是 FreeBSD 環境

  1. 首先去 odbtp 官網下載 odbtp-1.1.4.tar.gz
    執行 zcat odbtp-1.1.4.tar.gz | tar xf -

  2. 進去 odbtp-1.1.4/php/ext

  3. vim Makefile, 把 PHP_INCROOT 改成 /usr/local/include/php

  4. 然後跑 make

  5. 編輯 /usr/local/etc/php.ini 加入:

    [odbtp]
    odbtp.interface_file = "/etc/odbtp.conf"
    odbtp.datetime_format = mdyhmsf
    odbtp.detach_default_queries = yes
    

    編輯 /etc/odbtp.conf 加入:

    [global]
    convert datetime = yes
    use row cache = yes
    right trim text = yes
    
    [mysqls]
    type = mssql
    odbtp host = 192.168.1.12    # sql server 的位置
    database = patw              # 資料庫名稱
    unicode sql = yes
    
  6. 把剛剛 make 產生的 php_odbtp.so 丟到 /usr/local/lib/php/20060613-debug/

  7. vim /usr/local/etc/php/extensions.ini

  8. 加入 extension=php_odbtp.so、並把 mssql 相關的都註解掉。

  9. 重開 apache

應該就支援 odbtp 連線囉!phpinfo() 裡頭會有 odbtp!

PHP 若是 Windows 環境

  1. 再來是 php 的設定

    將相應版本的 php_odbtp_mssql.dll 複製到 php 的 ext 目錄中。
    官網包的 odbtp-1.1.4 只有支援到 PHP-5.1.1,
    再高他就不吃了,無法載入。
    因此請至 http://odbtp.cvs.sourceforge.net/viewvc/odbtp/odbtp/php/bin_win32/
    抓相應的版本,不過目前(2009/10/18) 最高也吃到 5.2.6 而已。

  2. 打開 php.ini,在 extension 區多加一個 extension=php_odbtp_mssql.dll
    並且把其他 mssql 相關的 extension 通通註解掉。

  3. php.ini 最下方加入:

    [odbtp]
    odbtp.interface_file = "C:\xmapplite\php\odbtp.conf"  # 此路徑請依照實際設定
    odbtp.datetime_format = mdyhmsf
    odbtp.detach_default_queries = yes
    

    對了,若使用 xampp,實際上 xampp 執行的設定檔在 apache\bin 底下。
    比較以前的 xampp 版本會這樣,像 1.6.6 版。

  4. odbtp-1.1.4\examples 裡頭的 odbtp.conf 複製到上面設定的目錄中

  5. 打開 odbtp.conf 編輯:

    [global]
    convert datetime = yes
    use row cache = yes
    right trim text = yes
    
    [mysqls]
    type = mssql
    odbtp host = 192.168.1.12    # mssql server 位置
    database = patw              # 資料庫名稱
    unicode sql = yes
    
  6. 應該都沒問題了,那麼就把 apache restart 吧!

  7. 如果都順利的話,應該可以在 phpinfo() 中看到 odbtp 了!

順便記錄一下

MSSQL SERVER 的欄位型態

n 在前面的呢, 可以吃 unicode, utf8 沒問題

像是 nvarchar, ntext, nchar 之類的,

若用 varchar, text, char 可能輸出 utf8 頁面就會變亂碼囉

  • 對 mssql 的 text 欄位長度 可能要增加屬性
    ( 修改 php.ini )
mssql.textlimit  =  4096
mssql.textsize  =  4096

One thought on “PHP 連 MSSQL SERVER 之解法 (odbtp)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *