Linux下PHP freetds连接MSSQL 乱码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下PHP freetds连接MSSQL 乱码相关的知识,希望对你有一定的参考价值。
本人新手,刚刚接触到php,最近有个日本项目要修正,最近就搭建了个 linux虚拟机系统是日文的,用的是Apache+Mssql+php sqlserver2005放在远程机器上,用的是freetds连接的MSSQL,环境配好之后对网站进行访问,得到的结果是WEB页面里边的下拉列表框显示的全是??????,然后我对freetds加了转码 client charset = utf-8,结果还是????改成client charset = EUCJP 后下拉框内容显示成乱码,其他编码格式都试验过了,跟前者没有什么区别,远程机上sqlserver2005的编码顺序是 japanese_CI_AS_KS,其他的几个编码顺序也试验过了,还是不好使!!
这个问题困扰我2天了,求高手们帮助一下,谢谢!!!!!!!!!!
确定你的页面编码是UTF-8的,ok?追问
我把项目中的页面文件,鼠标右键的properties里边的编码格式设置成utf-8,页面文件里的代码是不能改的,不能向里边新增编码格式设置,因为这个项目是修正的,在客户那里是正常的。然后我测试了一下,发现整个页面全变成乱码,比以前还严重,以前只是从数据库取的数据乱码,现在页面上显示的title都变成了乱码,就是这么个状况!
参考技术ALinux下PHP连接MS SQLServer的办法
Linux下PHP连接MS SQLServer的办法
分析问题
本来PHP脚本读写SQLServer是没有什么问题的,在Apache for windows和Windows IIS下可以工作的很好,一般可以通过ODBC或SQLServer Client连接,这都是Windows下面现成的。但是在Linux下面没有现成的ODBC和SQLServer Client,需要我们自己安装。
解决问题
一、相关软件
freetds-0.53.tgz
这个软件能够用Linux和Unix连接MS SQLServer和Sybase数据库。
二、安装配置步骤
第一步:编译安装freetds:
得到freetds-0.53.tgz后
cp freetds-0.53.tgz /tmp/. (拷贝freetds包到/tmp目录)
cd /tmp (进入目录)
tar zxvf freetds-0.53.tgz (解压)
cd freetds-0.53 (进入解压后目录)
./configure –prefix=/usr/local/freetds --with-tdsver=7.0
gmake (生成Makefile,我试验过,make也可以)
gmake install (安装)
关于上面configure我想说一下,--prefix=/usr/local/freetds是指安装到/usr/local/freetds这个目录中,--with-tdsver=7.0是指安装tds 7.0版本(最开是我没有加这个编译参数,结果按照默认编译为5.0。5.0连接数据库的端口是4000,不是SQLServer的1433)
第二步:重新编译PHP4
./configure [--with-apxs --with-mysql...] --with-sybase=/usr/local/freetds(请注意是sybase)
make
make install
第三步:配置freetds
vi /usr/local/freetds/etc/freetds.conf
具体配置见该文件中的说明
例: (典型配置)
[sqlserver]
host = sql_server_name_or_host_ip (你的SQLServer机器名字或者IP地址)
port = 1433
tds version = 7.0
在这个配置文件中可以配置Windows域登陆或者SQLServer账号登陆两种方式
第四步:配置php.ini文件
找到 ;extension=mssql70.so
将注释;去掉成
extension=mssql70.so
第五步:在php中建立数据库连接
$link=mssql_connect("sqlserver",$your_username,$your_password) or die (“can’t Connect to Database”);
echo $link;
在浏览器中运行上面脚本, 如果你得到一个link号那么恭喜,你已经配置好了,如果出现Call to undefined function: mssql_connect() 那说明仔细看上面的安装配置过程看你哪一步没有对。
注意:sqlserver名称是在/usr/local/freetds/etc/freetds.conf中定义的host参数,如果你写的IP地址,就是IP地址。
其他数据库操作参考相关mssql函数
注意,在sql语句中不支持中文!!!
第六步:调试
如果出现不能连接,请在freetds配置文件中找到;dump file = /tmp/freetds.log这一行,注释掉前面的分号,再执行一下测试脚本,察看/tmp/freetds.log文件,它可以告诉你很多出错的信息帮助你排除问题。
PHP与Oracle数据库连接
PHP提供了两套函数与Oracle连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。如前所述,你的PHP安装选项应该可以支持两者的使用。
连接
if ($conn=Ora_Logon("[email protected]","password"))
{
echo "SUCCESS ! Connected to database\n";
}
else
{
echo "Failed :-( Could not connect to database\n";
}
Ora_Logoff($conn);
phpinfo();
?>
以上代码使用TNSNAME(在你的tnsnames.ora文件中指明)定义的Oracle数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ora_logon函数返回一个非零的连接ID并储存在变量$conn中。
详细内容
http://hi.baidu.com/普及网/blog/item/3fe4df12c474e9956438db72.html
以上是关于Linux下PHP freetds连接MSSQL 乱码的主要内容,如果未能解决你的问题,请参考以下文章
运维 | CentOS 7 下给 PHP 安装 MSSQL - PDO拓展