公司现在用的数据库比较杂,MSSQL、ORACLE、MYSQL都有在用,之前使用WINDOWS PHP的环境,这种情况下使用PHP连MSSQL是比较容易的,但性能上却比之LAMP差了不少。由此,新工作的主要的事情就是系统及WEB配置的迁移。
但是LAMP环境下,PHP连MSSQL却有不少的问题。公司的单点登陆问题就实现不了。更不能体现LAMP较之WAMP的优势。怎么办,BAIDU用吧。却发现很多中文的解决方案,不是版本较老,就是实现不了。后来,选择了GOOGLE,找到了很多E文的解决方案。试着做了,虽说走了些弯路,但最终还是实现了我的需求.期间,参考了提供驱动的freetds官方网站,很仔细的阅读了文档,以及一些前人的解决方案。在些感谢他们。
目前,我实面了种情况下的安装:
第一:系统安装时已经安装配置好LAMP。这时重新编译PHP环境相当困难。
我使用RPM包和TAR包两种方式来安装环境。并不改动PHP的安装及配置,但只能使用ODBC连接MSSQL(数据源)。
第二:系统安装后,使用TAR包安装配置LAMP环境。这时可以重新编译PHP。
我使用TAR包来安装,且有重新编译PHP和不重新编译PHP的两种方案。重新编译可以实现直接连接和ODBC连接两种方式。不重新编译可以实现ODBC连接MSSQL(数据源)
。
这篇博文,以第一种情况,且使用TAR包的方式来安装freetds,以rpm安装unixODBC-devel及unixODBC。使用ODBC连接MSSQL(数据源)。(要想了解更多的关于php下如何连接MSSQL,以及几种方式就参考中的HOWTO文档,我接触到的使用了两种一是直接连接,一是odbc。)
一、安装环境
1、CentOs5.1 FreeTds0.64.tar.gz unixODBC-2.2.11-7.1(除了FreeTds是额外的包,其它的都可以使用YUM来安装,或是系统安装时就装好)
2、最好也安装上XWINDOWS,我安装的是GNOME的,因为配置DSN(数据源)时会用上。当然,你也可以在文本界面中配置。
二、部分包的安装及版本显示
1、[root@rpm-mssql~]#rpm-aq|grephttpd
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(这个包包含ApacheHTTP服务器的包含文件、头文件和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|grepphp
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|grepunixODBC
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连MSSQL的。
4、安装要求的包:
freetds-0.6.tar.gz
unixODBC-kde-2.2.11-7.1
unixODBC-devel-2.2.11-7.1.i386.rpmyuminstall-yunixODBC-devel[url=[/b[/url]]
三、安装、测试和配置:
1、安装freetds(均是在root用户下,如果你在其它用户下,记得在运行makeinstall时su-root)
注:在系统安装时要安装上GCC编译器等开发工具及库。不过,在CentOs下少什么就用yum来安装啦。
注:同样的条件可以安装在REDHATAS5.1及AS5下。
[root@rpm-mssqlfreetds-0.64]#tarzxvffreetds-0.64.tar.gz
[root@rpm-mssql~]#cdfreetds-0.64
[root@rpm-mssqlfreetds-0.64]#./configure--with-tdsver=7.0--with-unixODBC
以下的要在root用户下执行,尤其是makeinstall
[root@rpm-mssqlfreetds-0.64]#make;makeinstall
[root@rpm-mssqlfreetds-0.64]#makeclean
ok,现在已安装好啦。这时会在/usr/local/etc生成freetds.conf文件
[root@rpm-mssqlfreetds-0.64]#cd/usr/local/etc
[root@rpm-mssqletc]#ll
total12
-rw-r--r--1rootroot3572Jan2419:13freetds.conf
-rw-r--r--1rootroot362Jan2419:13locales.conf
-rw-r--r--1rootroot219Jan2419:13pool.conf
可以使用ODBCConfig来配置啦
注,在安装unixODBCunixODBC-devel后,就会在/etc生成两个文件odbc.iniodbcinst.ini:
[root@rpm-mssqlfreetds-0.64]#ll/etc/od
odbc.iniodbcinst.ini.rpmnewoddjobd.conf.d/
odbc.ini.rpmnewoddjob/
odbcinst.inioddjobd.conf
2、测试和配置
A、安装好freetds后,先使用tsql来测试下:
[root@rpm-mssqletc]#/usr/local/bin/tsql-S211.103.155.xxx-UsaPassword:password(xxx是三个数字,为了安全,变了。而:后的password为真实的SA的密码)
localeis"en_US.UTF-8"
localecharsetis"UTF-8"
Password:(这里还要再输入一次密码)
1>
如果你足够幸运,呵呵,就会出现“1>”说明你之前的编译正确啦。
接下来就开始真正的进入正题啦,配置freetds.conf
B、编辑freetds.conf(经测试,这个步骤可以省去。因为装freetds的目的是为了它的驱动。实际上这也暗示着大家采用rpm包安装时需要做些什么啦)
[root@rpm-mssqletc]#vi/usr/local/etc/freetds.conf
加入如下代码,
[MySql2k](在FreeTds0.64版本中,这个参数很重要。在“SystemDSN”中,需要用的到。这也是和之前版本的一些差别)
host=211.103.155.xxx(这个是装有sqlserver2k的服务器IP,连SQL2K5也能行)
port=1433
tdsversion=8.0
C、配置/etc/odbc.ini/etc/odbcinst.ini(注,为了更直观,我使用X视窗的方式下图形配置,当然,我也会把经过图形配置后的ini文件拷配过来)
这里需要用到ODBCConfig/usr/bin/ODBCConfig
[root@rpm-mssqletc]#/usr/bin/ODBCConfig
ODBCConfig:cannotconnecttoXserver
D、切换到XWINDOWS,前面说过,使用的是GNOME,各位亦可以使用KDE。君不见unixODBC-kde就是为KDE专门做的嘛。
[root@rpm-mssqletc]#/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=ODBCforPostgreSQL
Driver=/usr/lib/libodbcpsqlS.so
Driver64=/usr/lib
Setup=/usr/lib
Setup64=/usr/lib
UsageCount=1
CPTimeout=
CPReuse=
[MySql2k]
Description=v0.64withProtocolv8.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数据源建立及注意事项:
图形设置"SystemDSN"的过程,是配置/etc/odbc.ini文件的过程:
下面的是图形配置"SystemDSN"后,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连MSSQL的效果吧
H、php页面测试
[root@rpm-mssql~]#vi/var/www/html/phpmssql.php
全文到些完结,下一篇估计写下全部是使用rpm包来安装的方式配置php连MSSQL. 下载本文示例代码