Linux下PHP連線SQL2000

回覆文章
布魯斯
Site Admin
文章: 211
註冊時間: 週四 2月 16, 2006 3:34 pm

Linux下PHP連線SQL2000

文章 布魯斯 »

介紹:

本功能php存取MS SQL Server



需求:

在其他的Windows系統中:

此功能是將MS的Client端工具安裝在PHP程式當中。Client端工具可由SQL Server安裝光碟或是WinNT中\winnt\system32下的ntwdblib.dll安裝到PHP Box的\winnt\system32之下;複製檔案僅有提供存取弁遄FClient工具的設定則需要完整的安裝工具。

在Unix/Linux平台中的需求:

想要在Unix/Linux平台中使用MSSQL您必須建立並安裝FreeTDS library。所有的程式碼與操作說明請參考FreeTDS 首頁:http://www.freetds.org/



註解:

在Windows中係使用微軟的DBLIB,其弁鄏b回傳一個於DBLIB中dbcolname()函式的欄位名稱。DBLIB是為了SQL Server6.0所發展而來,其最大字元識別長度為30;因此,最大的欄位長度就是30。不過在Linux中的FreeTDS就沒有這樣的問題。

軟體版本:Red Hat 9.0 Freetds 0.62.3 Apache 2.0.49 PHP 5.0.ORC3
以下執行功能linux Server連線至Windows 2000的SQL Server。

第一步:安裝FreeTDS:

1-. 下載 freetds -> www.freetds.org
2-. 執行tar -zxvf freetds-stable-tgz
3-. 進入 cd freetds-0.62.3
4-. ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib --enable-dbmfix --with-gnu-ld

注意: 使用SQL 2000為tdsver=8.0 ;而使用SQL7.0則為 tdsver=7.0。

5-. make
6-. make install
7-. /usr/local/freetds/bin/tsql -S <ip of the server> -U <User SQL>
注意: 預設的使用者帳號是sa 且沒有密碼。
For example: /usr/local/freetds/bin/tsql -S 198.168.100.2 -U sa
8-. 在 freetds.conf 下新增下列文字( 路徑為/usr/local/freetds/etc )
[TDS]
host = <ip of the Server with Sql>
port = 1433
tds version = 8.0

注意: 使用SQL 2000為tdsver=8.0 ;而使用SQL7.0則為 tdsver=7.0。

9-. 在 /etc/ld.so.conf 之下新增下述路徑:
/usr/local/freetds/lib

安裝 APACHE

1-. 下載apache www.apache.org
2-. tar -zxvf httpd-2.0.49.tar.gz
3-. cd httpd-2.0.49
4-. ./configure --prefix=/etc/httpd --enable-so
5-. make
6-. make install
7-. 設定檔案 -> httpd.conf ( /etc/httpd/conf/httpd.conf )
8-. 重載 apache: /etc/httpd/bin/apachectl start
/etc/httpd/bin/apachectl stop

安裝 PHP

1-. 於(www.php.net)下載PHP
2-. tar -zxvf php-5.0-ORC3.tar.gz
3-. cd php-5.0-ORC3
4-. ./configure --with-apxs2=/etc/httpd/bin/apxs --enable-versioning --with-mssql=/usr/local/freetds --disable-libxml
5-. make
6-. make install
7-. cp php.ini-DIST /usr/local/lib
8-. 在Apache設定檔 /etc/httpd/conf/httpd.conf 中新增下列文字:
AddType application/x-httpd-php .php

測試網頁如下:

代碼: 選擇全部

<html> 
<body>
<?php
$con = mssql_connect ("<ip of the server SQL>", "sa", "");
mssql_select_db ("<Data Base>", $con);
$sql= "SELECT * FROM <Table>";
$rs= mssql_query ($sql, $con);
echo "The field number one is: ";
echo mssql_result ($rs, 0, 0);
mssql_close ($con);
?>
</body>
</html>
布魯斯
Site Admin
文章: 211
註冊時間: 週四 2月 16, 2006 3:34 pm

文章 布魯斯 »

安裝完freetds之後,compile PHP4.37,
結果出現錯誤訊息

代碼: 選擇全部

In file included from 
/servers/build/php-4.3.7/ext/mssql/php_mssql.c:33:
/servers/build/php-4.3.7/ext/mssql/php_mssql.h:41: redefinition of
`SHORT'
/servers/lib/freetds-0.62.3/include/sybdb.h:117: `SHORT' previously
declared here
make: *** [ext/mssql/php_mssql.lo] Error 1


原來是php的bug,詳見http://www.manucorp.com/archives/php-bugs/200406/msg00155.php

下載新的php原始檔編譯就可以了。
布魯斯
Site Admin
文章: 211
註冊時間: 週四 2月 16, 2006 3:34 pm

Re: Linux下PHP連線SQL2000

文章 布魯斯 »

在Fedora的版本, 如果都是用yum安裝更新apache及php
要使用freetds的方法就很簡單,

1.安裝freetds
yum install freetds
2.安裝php-mssql
yum install php-mssql
3.重新啟動apache
回覆文章