這是之前面試的時候的問題與事後筆記,補記一下。
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 上哦。
- 解開 odbtp-1.1.4
-
將裡面的 winservice 資料夾複製到
C:\odbtp\
-
開啟命令提示字元 (
cmd
),用管理員權限執行 -
進去 winservice 目錄後,打入:
odbtpctl install odbtpctl start
正常來說,在 Windows 的 “服務” 中就會多出 Odbtp Server 的項目。
PHP 若是 FreeBSD 環境
- 首先去 odbtp 官網下載
odbtp-1.1.4.tar.gz
執行zcat odbtp-1.1.4.tar.gz | tar xf -
-
進去
odbtp-1.1.4/php/ext
-
vim Makefile
, 把PHP_INCROOT
改成/usr/local/include/php
-
然後跑
make
-
編輯
/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
- 把剛剛
make
產生的php_odbtp.so
丟到/usr/local/lib/php/20060613-debug/
-
vim /usr/local/etc/php/extensions.ini
-
加入
extension=php_odbtp.so
、並把mssql
相關的都註解掉。 -
重開 apache
應該就支援 odbtp 連線囉!phpinfo()
裡頭會有 odbtp!
PHP 若是 Windows 環境
- 再來是 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 而已。 -
打開
php.ini
,在extension
區多加一個extension=php_odbtp_mssql.dll
並且把其他mssql
相關的 extension 通通註解掉。 -
在
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 版。 -
將
odbtp-1.1.4\examples
裡頭的odbtp.conf
複製到上面設定的目錄中 -
打開
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
- 應該都沒問題了,那麼就把 apache restart 吧!
-
如果都順利的話,應該可以在
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)”