patw 的筆記、生活、隨筆
PHP 連 MSSQL SERVER 之解法 (odbtp)
這是之前面試的時候的問題與事後筆記,補記一下。
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. ee 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. ee /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 <- ms sql server 位置
database = patw <- 資料庫名稱
unicode sql = yes
6.應該都沒問題了,那麼就把 apache restart 吧!
7.如果都順利的話,應該可以在 phpinfo() 中看到 odbtp 了!
※ 順便記錄一下
MS SQL SERVER 的欄位型態
有 n 在前面的呢, 可以吃 unicode, utf8 沒問題
像是 nvarchar, ntext, nchar 之類的,
若用 varchar, text, char 可能輸出 utf8 頁面就會變亂碼囉
* 對 mssql 的 text 欄位長度 可能要增加屬性
( 修改php.ini )
mssql.textlimit = 4096
mssql.textsize = 4096
| Print article | This entry was posted by patw on 2009年十二月2日 at 8:51 上午, and is filed under PHP, SQL Server. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |