標籤:
最近在做一個項目,該項目的資料庫是微軟公司的的SQLserver ,資料庫安裝在另一台windows伺服器上,而項目卻部署在ubuntu server上。那麼這樣就會涉及到項目在linux上如何連結SQLserver ?在這裡我用的是freetds 來做連結資料庫的中介軟體,下面是我實踐的步驟:
1.下載最新的freetds ,訪問 http://www.freetds.org/, 或者在 ubuntu上用 wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-stable.tgz 下載穩定的版本。
2.安裝freetds 和 配置 freetds
cd 進入freetds所在目錄,
$ tar zxvf freetds-stable.tgz(解壓)
$ ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib
$ make
$ make install
configure 步驟和 make 步驟可以用 普通使用者的許可權來完成,install 步驟最好用root 使用者,或者是對/usr/local/ 目錄有讀寫的許可權的使用者.
配置:
編輯/etc/ld.so.conf,在其中插入一行:
/usr/local/freetds/lib
然後運行以下指令使更改生效:
ldconfig
編輯freetds 的設定檔,設定資料庫串連資訊
vim /usr/local/freetds/etc/freetds.conf 如下:
在這裡找到egServer70節點,配置你資料所在的伺服器位址,一般連接埠不用改,除非資料庫訪問用的是其它連接埠。注意一般這個設定檔中是沒有 client charset 的選項的,
需要手動添加,防止資料庫亂碼。這裡設定成 utf8 , 這個編碼要和資料庫編碼一致。修改完成之後就儲存退出。然後驗證這個配置是否是ok 的。
cd /usr/local/freetds/bin/
./tsql -H your SQLserver addr -p 1433 -U 使用者名稱 -P 密碼 -D 資料庫
注意你的密碼有特殊字元例如 !和 # 之類的,那麼需要加上轉義符 \!\# ,這樣就會被 freetds 識別。
如果執行該命令返回的是 如下資訊
Unexpected EOF from the server
那說明是freetds 的版本資訊不正確,關於freetds 版本的資訊 可以參考 http://www.freetds.org/userguide/choosingtdsprotocol.htm
那麼對應的版本資訊修改只需要在 /usr/local/freetds/etc/freetds.conf 中修改 特定資料庫連接的tds version ,這裡我串連的是 SqlServer 2005 ,預設版本是 7.0 , 但是串連報錯,所以這裡我修改成了7.1 就ok 了,如下:
修改完成之後,再次測試如果返回的結果下,那麼就說明串連資料庫成功了。
3.php 串連 SQLserver
上面的測試直接用freetds 測試資料庫是否可以連結資料庫,那麼怎麼才能讓php也支援SqlServer 呢? 這裡需要用到php5的開發人員模式,之前我預設只安裝了php5,
所以這裡你需要安裝一下php5-dev ,直接用命令 apt-get install php5-dev,安裝完成後在/usr/bin 目錄下就會看到 phpize5 等相關php 開發這模式的外掛程式
這裡我預設安裝的是php5.5.9 ,所以需要下載 php5.5.9的源碼,然後進入 ext/mssql/ 編譯對SQLserver 的支援。 源碼:http://us2.php.net/get/php-5.5.9.tar.xz/from/this/mirror
同樣也可以用 wget 下載。下載後用 tar xf php-5.5.9.tar.gz ,進入到 ext/mssql 目錄執行以下命令:
/usr/bin/phpize5
./configure --with-php-config=/usr/local/webserver/php/bin/php-config5 --with-mssql=/usr/local/webserver/freetds/
make && make install
安裝成功後,你可以在 /usr/lib/php5/20121212 這目錄下有 mssql.so ,當然這個檔案的大體目錄是位於 /usr/lib/php5 ,至於後面有年月日組成的這個檔案夾,在不同不伺服器上是不一樣的。
接下來就編輯php.ini 設定檔 /etc/php5/apache2/php.ini
在檔案中加上 extension=mssql.so
然後重啟 apache service apache2 restart
在/var/www/html 目錄下建立 index.php 檔案,cat index.php
echo phpinfo();
然後訪問 localhost/index.php ,你就可以看到 mssql 的支援了
這說明php已經support SQLSERVER 資料庫了,如果你想測試下能不能把資料取出來,那麼可以寫一下demo 的 code,建立 test.php
header("Content-type: text/html; charset=utf-8"); $msdb=mssql_connect("mssql.yourdomain.com:1433","username","password"); if (!$msdb) { echo "connect sqlserver error"; exit; } mssql_select_db("database_name",$msdb); $result = mssql_query("SELECT top 5 * FROM table", $msdb); while($row = mssql_fetch_array($result)) { var_dump($row); } mssql_free_result($result);
到這裡所有的步驟已完成。
ubuntu系統下配置php支援SQLServer資料庫