文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>在linux上访问MS SQL Server

在linux上访问MS SQL Server

时间:2009-01-22  来源:会游泳的鱼

    本来想在CentOS5.2下,直接通过PHP的sybase(或者mssql)库访问windows下的MSSQL2000(apt-get install php5-sybase),结果CentOS没有相应的包(debian咋就有捏?)。<-前面这句话需要改改了,错怪了CentOS!今天发现原来是自己的yum源只指向了CDROM,换了源就可以用“yum install php-mssql.i386”命令安装了,然后要记得relaod一下apache。     当然你可以自己编译一个,也可以到http://rpmfind.net/linux/rpm2html/search.php?query=mssql.so找一个现成的。       如果不想自己编译,还有两种方式(第一种方式还不如自己编译算了):   一、“Installing The PHP-MSSQL Module On CentOS 5.0”(http://www.howtoforge.com/installing_php_mssql_centos5.0)   Author & Content by Tim Haselaars (http://www.trinix.be)

As you might have noticed on Centos 5.0, there is no PHP-MSSQL module/extension available in the default yum repositories. So if you want to use it you can alter the PHP binary or you can compile an mssql module/extension. In this article I will explain how to compile the mssql module/extension.

You need to activate the RPMForge custom repository (formely known as Dag Wieers): http://dag.wieers.com/rpm/packages/rpmforge-release/

Grab your specific RPM and install it:

wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-*.rpm rpm --install rpmforge-release-*.rpm

Next step is to install freetds, freetds-devel, php-devel, and the Development tools.

yum groupinstall 'Development Tools'

yum install freetds freetds-devel --enablerepo=rpmforge

yum install php-devel

Next we alter the php.spec file, which contains the php configuration for compiling.

vi /usr/src/redhat/SPECS/php.spec

If you don't have the php.spec file, you can download the php src rpm.

wget centos.mirrors.skynet.be/pub/centos/5/os/SRPMS/php-5.1.6-5.el5.src.rpm

and next

rpm –install php-5.1.6-5.el5.src.rpm

And then do an updatedb and locate php.spec.

Edit the CFLAGS= line (~line 310) of the php.spec file - remove -Wno-pointer-sign. Then add the following piece of code to it:

Group: Development/Languages
Requires: php = %{version}-%{release}, php-pdo
Summary: A module for PHP applications that use the MSSQL database.
provides: php_database
BuildRequires: freetds-devel

%description mssql
The MSSQL package contains a dynamic shared object that will add
support for accessing MSSQL databases to php.

Start building your php rpm:

rpmbuild -bb ./php.spec

If you are asked for some dependencies, just yum install them.

cd /usr/src/redhat/BUILD/php-5.1.6/ext/mssql/

Now we are going to make the mssql module without having to rewrite the php binary:

phpize
./configure --with-mssql
make
make install

Next look for the mssql.so file and make sure it is in the module directory specified in your php.ini. Copy it to the specified location if needed.

Add this line to your php.ini:

vi /etc/php.ini

extension=mssql.so

Save the php.ini and restart Apache:

/etc/init.d/httpd restart

 

二、CentOs下php连mssql并配置unixODBC (http://rickyfang.blog.51cto.com/1213/125837)(http://www.rickyfang.net/article.asp?id=235)

目前,我实面了种情况下的安装:
第一:系统安装时已经安装配置好LAMP。这时重新编译PHP环境相当困难。
          我使用RPM 包和TAR包两种方式来安装环境。并不改动PHP的安装及配置,但只能使用ODBC连接MS SQL(数据源)。

第二:系统安装后,使用TAR包安装配置LAMP环境。这时可以重新编译PHP。
        我使用TAR包来安装,且有重新编译PHP和不重新编译PHP的两种方案。重新编译可以实现直接连接和ODBC连接两种方式。不重新编译可以实现ODBC连接MS SQL(数据源)



    这篇博文,以第一种情况,且使用TAR包的方式来安装freetds,以rpm安装unixODBC-devel及unixODBC。使用ODBC连接MS SQL(数据源)。(要想了解更多的关于php下如何连接MS SQL,以及几种方式就参考www.freetds.org中的HOWTO文档,我接触到的使用了两种一是直接连接,一是odbc。)

一、安装环境
1、CentOs 5.1 + FreeTds0.64.tar.gz + unixODBC-2.2.11-7.1(除了FreeTds是额外的包,其它的都可以使用YUM来安装,或是系统安装时就装好)
2、最好也安装上XWINDOWS,我安装的是GNOME的,因为配置DSN(数据源)时会用上。当然,你也可以在文本界面中配置。

二、部分包的安装及版本显示
1、[root@rpm-mssql ~]# rpm -aq |grep httpd
system-config-httpd-1.3.3.1-1.el5
httpd-2.2.3-11.el5_1.centos.3
httpd-devel-2.2.3-11.el5_1.centos.3    (这个包包含 Apache HTTP 服务器的包含文件、头文件和 APXS 工具程序。如果你打算载入额外的模块(除了该产品所提供的),你需要它。 嘿嘿,如果装PHP时,不要使用TAR包的HTTPD,那就可以使用--with-apxs2=/usr/sbin/apxs.关于此的安装另文说明)
httpd-manual-2.2.3-11.el5_1.centos.3

2、[root@rpm-mssql ~]# rpm -aq |grep php
php-cli-5.1.6-15.el5
php-common-5.1.6-15.el5
php-5.1.6-15.el5
php-odbc-5.1.6-15.el5
php-pdo-5.1.6-15.el5
php-pear-1.4.9-4
php-mysql-5.1.6-15.el5
php-ldap-5.1.6-15.el5
你并不需要安装如此之多,根据自已的需求,安装。因为我是系统安装时定制安装成LAMP环境的。

3、[root@rpm-mssql ~]# rpm -aq |grep unixODBC
unixODBC-devel-2.2.11-7.1 (这个包的作用同httpd-devel,一定要装上啊,安装freetds.tar.gz时要用上的,它会自动寻找unixODBC的安装路径的。否则有可能编译出错。)
unixODBC-2.2.11-7.1
unixODBC-kde-2.2.11-7.1(同志们,这个要装啊,本来是KDE桌面下的图形配置ODBC数据源的工具。呵呵,在GNOME中也能用的。)

OK,mysql的安装包我不多说,因为这里主要是使用ODBC(DSN数据源)在LAMP环境下PHP连MS SQL的。

4、安装要求的包:
freetds-0.6.tar.gz   http://www.ibiblio.org/pub/Linux/ALPHA/freetds/stable/
unixODBC-kde-2.2.11-7.1
unixODBC-devel-2.2.11-7.1.i386.rpm     yum install -y unixODBC-devel http://mirror.centos.org/centos/5.1/os/i386/CentOS/

三、安装、测试和配置:
1、安装freetds(均是在root用户下,如果你在其它用户下,记得在运行make install时su - root)
注:在系统安装时要安装上GCC编译器等开发工具及库。不过,在CentOs下少什么就用yum来安装啦。
注:同样的条件可以安装在REDHAT AS5.1 及AS5下。

[root@rpm-mssql freetds-0.64]# tar zxvf freetds-0.64.tar.gz
[root@rpm-mssql ~]# cd freetds-0.64
[root@rpm-mssql freetds-0.64]# ./configure --with-tdsver=7.0 --with-unixODBC

以下的要在root用户下执行,尤其是make install
[root@rpm-mssql freetds-0.64]# make;make install
[root@rpm-mssql freetds-0.64]# make clean
ok,现在已安装好啦。这时会在/usr/local/etc生成freetds.conf文件
[root@rpm-mssql freetds-0.64]# cd /usr/local/etc
[root@rpm-mssql etc]# ll
total 12
-rw-r--r-- 1 root root 3572 Jan 24 19:13 freetds.conf
-rw-r--r-- 1 root root  362 Jan 24 19:13 locales.conf
-rw-r--r-- 1 root root  219 Jan 24 19:13 pool.conf

可以使用ODBCConfig来配置啦
注,在安装unixODBC unixODBC-devel后,就会在/etc生成两个文件odbc.ini odbcinst.ini:
[root@rpm-mssql freetds-0.64]# ll /etc/od
odbc.ini             odbcinst.ini.rpmnew  oddjobd.conf.d/
odbc.ini.rpmnew      oddjob/              
odbcinst.ini         oddjobd.conf    

2、测试和配置
A、安装好freetds后,先使用tsql来测试下:
[root@rpm-mssql etc]# /usr/local/bin/tsql -S 211.103.155.xxx -U sa Password:password (xxx是三个数字,为了安全,变了。而:后的password为真实的SA的密码)
locale is "en_US.UTF-8"
locale charset is "UTF-8"
Password:   (这里还要再输入一次密码)
1>
如果你足够幸运,呵呵,就会出现 “1>” 说明你之前的编译正确啦。  
接下来就开始真正的进入正题啦,配置freetds.conf

B、编辑freetds.conf(经测试,这个步骤可以省去。因为装freetds的目的是为了它的驱动。实际上这也暗示着大家采用rpm包安装时需要做些什么啦)

[root@rpm-mssql etc]# vi /usr/local/etc/freetds.conf
加入如下代码,
[MySql2k]  (在FreeTds0.64版本中,这个参数很重要。在“System DSN”中,需要用的到。这也是和之前版本的一些差别)
        host = 211.103.155.xxx (这个是装有sql server 2k的服务器IP,连SQL 2K5也能行)
        port = 1433
        tds version = 8.0

C、配置/etc/odbc.ini   /etc/odbcinst.ini (注,为了更直观,我使用X视窗的方式下图形配置,当然,我也会把经过图形配置后的ini文件拷配过来)
这里需要用到ODBCConfig  /usr/bin/ODBCConfig
[root@rpm-mssql etc]# /usr/bin/ODBCConfig
ODBCConfig: cannot connect to X server

D、切换到X WINDOWS,前面说过,使用的是GNOME,各位亦可以使用KDE。君不见unixODBC-kde就是为KDE专门做的嘛。
[root@rpm-mssql etc]# /usr/bin/ODBCConfig后,出现如下图,图示中有说明。但要声明的是,我使用的FreeTds的版本是0.64的,和前一版本0.63有些使用上的差别。主要是"Servername"的变化,以及"Setup"的变化。在接下来的一系列图示中,会分别说明。


     安装FreeTds的目的,就是为了提供PHP连接MSSQL的驱动的。上面所有的动作,就是为此做准备的。驱动有了装载的路径,就要增加数据源,以使连接MSSQL成功。

接下来的E,F就是重点的以图文并茂的方式来说明的。
E、图形设置Driver的过程,就是配置/etc/odbcinst.ini的过程。
freetds0.64版本增加了对64位数据库的支持。


下面的是图形配置后的odbcinst.ini的文件,其中MySql2k是新增加地:
[root@rpm-mssql ~]# cat /etc/odbcinst.ini
[PostgreSQL]
Description             = ODBC for PostgreSQL
Driver          = /usr/lib/libodbcpsqlS.so
Driver64                = /usr/lib
Setup           = /usr/lib
Setup64         = /usr/lib
UsageCount              = 1
CPTimeout               =
CPReuse         =

[MySql2k]
Description             = v0.64 with Protocol v8.0
Driver          = /usr/local/lib/libtdsodbc.so
Driver64                = /usr/local/lib/libtdsodbc.so
Setup           = /usr/lib/libtdsS.so
Setup64         = /usr/lib/libtdsS.so
UsageCount              = 1
CPTimeout               =
CPReuse         =

F、DSN数据源建立及注意事项:
图形设置"System DSN"的过程,是配置/etc/odbc.ini文件的过程:



下面的是图形配置"System DSN"后,odbc.ini的文件,如果没有或是不想安装X 视窗的话,直接设置。
[root@rpm-mssql ~]# cat /etc/odbc.ini
[mssql]
Description             = MySql2k
Driver          = MySql2k
Servername              = MySql2k   (这里,不要设置IP地址什么的,要和FREETDS.CONF里的设置一样,至少我试的就是如此,在FREETDS0.63中并没有此现象。)
Database                =
UID             = sa
PWD             =
Port            = 1433

G、isql 测试:

成功了,呵呵,实际上这篇文章也可以就此打住啦。不过。还是实测下PHP连MS SQL的效果吧

H、php页面测试
[root@rpm-mssql ~]# vi /var/www/html/phpmssql.php
<?
$conn_beidabiz=odbc_connect("mssql",sa,"password"); ###password,变成自己相应的直实密码。####
{
echo "ok";
}
?>

 

我在编译FreeTDS时使用的参数是:

./configure --with-tdsver=8.0 --with-unixODBC

结果使用PHP或者如下两个工具查询数据后,返回的中文数据是乱码:

isql -v mssql myusername mypasswd

DataManager

 

此问题也有两种方法解决:

1、编辑 /usr/local/etc/freetds.conf 在相应的段增加一行:client charset = UTF-8  (http://aseity.blog.163.com/blog/static/16481711200702061211659/)
例如:[MySql2k]
        host = 192.224.2.8
        port = 1433
        tds version = 8.0
        client charset = UTF-8

FreeTDS能够自动识别服务器端的charset. 因此 FreeTDS 需要用户设定客户端的
charset. 这也就是客户端应用程序期待从FreeTDS获得的数据所应该使用的charset.
一旦client charset设定, FreeTDS将实现从 server charset <--> client charset
的转换.

如果有两个客户应用程序都要访问同一个MS SQLServer,这两个客户程序所
接受的字符集分别是 UTF-8 和 GB2312. 那么解决的办法是在FreeTDS.conf中设置
两组DataSource,它们的服务器设置相同,但client charset分别设为 UTF-8和GB2312. 在
odbc.ini中也设置两组不同的DSN 分别指向这两组DataSource. 而最终两个客户程序
各自使用与之相应的DSN即可.

2、在编译安装freetds时,需要在./configure参数中加上--disable-libiconv,因为sql   server   2k默认的编码方式是CP936,如果没有加上这个参数,freetds在读取数据的时候,要默认做一次转换,导致乱码的出现。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载