铁血霸主 2007-8-1 22:19
Linux下PHP连接MS SQLServer的办法
<p><p><span class="ccwheading02">提出问题 </span></p><p>前几天做了一个非常奇怪的项目,我公司开发了一套基于中国联通SGIP协议的SP端短消息服务软件,提供联通130短信服务。这套系统是Windows2000下的,<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, '%CA%FD%BE%DD%BF%E2');" target="_self"><u><strong>数据库</strong></u></a>采用的是微软SQLServer2000,并且已经正常运行了一段时间。而最近由于要在WEB上提供短消息用户的一些信息,就需要从WEB上读写SQLServer数据库,本来SQLServer数据库的最佳搭档应该是微软IISASP服务端脚本,但我公司一向认为IIS+ASP的稳定性和安全性都不尽如意,希望能够在<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, 'Linux');" target="_self"><u><strong>Linux</strong></u></a>下用<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, 'PHP');" target="_self"><u><strong>PHP</strong></u></a>脚本读写SQLServer。</p><p>分析问题 </p><p>本来PHP脚本读写SQLServer是没有什么问题的,在<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, 'Apache');" target="_self"><u><strong>Apache</strong></u></a> for windows和WindowsIIS下可以<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, '%B9%A4%D7%F7');" target="_self"><u><strong>工作</strong></u></a>的很好,一般可以通过ODBC或SQLServerClient连接,这都是Windows下面现成的。但是在Linux下面没有现成的ODBC和SQLServer Client,需要我们自己安装。</p><p>解决问题 </p><p>一、相关软件 </p><p>freetds 来源:<a href="ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/freetds-0.53.tgz"><u><font color="#0000ff">ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/freetds-0.53.tgz</font></u></a> </p><p>这个软件能够用Linux和Unix连接MS SQLServer和Sybase数据库。</p><p>二、安装配置步骤 </p><p>第一步:编译安装freetds: </p><p>得到freetds-0.53.tgz后 </p><p>cp freetds-0.53.tgz /tmp/. (拷贝freetds包到/tmp目录) </p><p>cd /tmp (进入目录) </p><p>tar zxvf freetds-0.53.tgz (解压) </p><p>cd freetds-0.53 (进入解压后目录) </p><p>./configure –prefix=/usr/local/freetds --with-tdsver=7.0 </p><p>gmake (生成Makefile,我试验过,make也可以) </p><p>gmake install (安装) </p><p>关于上面configure我想说一下,--prefix=/usr/local/freetds是指安装到/usr/local/freetds这个目录中,--with-tdsver=7.0是指安装tds7.0版本(最开是我没有加这个编译参数,结果按照默认编译为5.0。5.0连接数据库的端口是4000,不是SQLServer的1433)</p><p>第二步:重新编译PHP4 </p><p>./configure [--with-apxs --with-mysql...] --with-sybase=/usr/local/freetds(请注意是sybase) </p><p>make </p><p>make install </p><p>第三步:配置freetds </p><p>vi /usr/local/freetds/etc/freetds.conf </p><p>具体配置见该文件中的说明 </p><p>例: (典型配置) </p><p>[sqlserver] </p><p>host = sql_server_name_or_host_ip (你的SQLServer机器名字或者IP地址) </p><p>port = 1433 </p><p>tds version = 7.0 </p><p>在这个配置文件中可以配置Windows域登陆或者SQLServer账号登陆两种方式</p><p>第四步:配置php.ini文件 </p><p>找到 ;extension=mssql70.so </p><p>将注释;去掉成 </p><p>extension=mssql70.so </p><p>第五步:在php中建立数据库连接 </p><p>$link=mssql_connect("sqlserver",$your_username,$your_password) or die (“can’t Connect to Database”); </p><p>echo $link; </p><p>在浏览器中运行上面脚本, 如果你得到一个link号那么恭喜,你已经配置好了,如果出现Call to undefined function: mssql_connect() 那说明仔细看上面的安装配置过程看你哪一步没有对。 </p><p>注意:sqlserver名称是在/usr/local/freetds/etc/freetds.conf中定义的host参数,如果你写的IP地址,就是IP地址。 </p><p>其他数据库操作参考相关mssql函数 </p><p>注意,在sql语句中不支持中文!!! </p><p>第六步:调试 </p><p>如果出现不能连接,请在freetds配置文件中找到;dump file = /tmp/freetds.log这一行,注释掉前面的分号,再执行一下测试脚本,察看/tmp/freetds.log文件,它可以告诉你很多出错的信息帮助你排除问题。<br>(e129)</p><div>