thinkphp连接sql server 2008(同时支持windows和linux环境)
来源:互联网 发布:linux 内核空间地址 编辑:程序博客网 时间:2024/06/04 18:00
最近遇到一个项目,需要用thinkphp访问sqlserver 2008数据库,而且数据库的表名和字段名都是中文,费了九牛二虎之力终于可以读取了,写入还没来得及测试,如果遇到问题后续补充吧。
总体思路分为两个步骤 1、寻找php连接sqlserver数据库驱动,2、解决中文表名和字段名问题
1、php连接sqlserver数据库驱动
我先按照网上的方法找了php_sqlsrv_54_ts.dll和php_pdo_sqlsrv_54_ts.dll ,此驱动可以连接成功,但是只支持windows平台。项目要求同时支持linux平台,没办法,后来终于找到了php_dblib.dll。下载地址:http://download.csdn.net/detail/hanzengyi/9588630
先将php_dblib.dll拷贝到php安装目录的ext文件夹下,修改php.ini,添加 extension = php_dblib.dll。然后修改thinkphp的配置文件:
'DB_SQLSERVER' = array('db_type' => 'mssql','db_user' => 'hzy','db_pwd' => 'hzy','db_host' => 'localhost',//'db_port' => '1433','db_name' => 'jwwxtemp','db_charset' => 'GB2312',);
写个简单的测试方法,表名:测试表,字段名:测试
public function index(){$table_name = iconv('UTF-8', 'GB2312', '测试表');//utf8中文表名转gb2312$col_name = iconv('UTF-8', 'GB2312', '测试');//utf8中文字段名转gb2312$result = M($table_name,null,C('DB_SQLSERVER'))->where(array($col_name=>'1'))->select();//从表“测试表”中查询字段"测试"=1的记录dump($result[$col_name]);//打印“测试”字段的值}
数据库信息填写正确,且账户权限正确的话,$result就是要查找的记录。但是得出的字段名为中文,不能被索引到,所以dump($result[$col_name]);会打印NULL。要想索引正确,必须将$result的key和value都转成utf8格式。
2、解决中文表名和字段名问题
以下两个方法将M()->select()得到的单行记录和多行记录转换成utf8格式
//将一行记录转换成utf8格式,适用于M()->select()返回单行记录时public function row2utf8($Result) {$Row = array();$key1=array_keys($Result);$key2 = array_keys($Result[$key1[0]]);for($i=0;$i<count($key2);$i++) {$Row[ iconv( 'gb2312', 'utf-8',$key2[ $i ]) ] = iconv( 'gb2312', 'utf-8', $Result[ 0 ][ $key2[ $i ] ] );}return $Row;}//将记录列表转换成utf8格式,适用于M()->select()返回多行记录列表时public function list2utf8($Result) {$Row = array();$key1=array_keys($Result);$key2 = array_keys($Result[$key1[0]]);for($i=0;$i<count($key1);$i++) {for( $j=0; $j<count( $key2 ); $j++ ) {$Row[ $key1[ $i ] ][ iconv( 'gb2312', 'utf-8',$key2[ $j ]) ] = iconv( 'gb2312', 'utf-8', $Result[ $key1[ $i ] ][ $key2[ $j ] ] );}}return $Row;}
最终,测试方法为:
public function index(){$table_name = iconv('UTF-8', 'GB2312', '测试表');//utf8中文表名转gb2312$col_name = iconv('UTF-8', 'GB2312', '测试');//utf8中文字段名转gb2312$result = M($table_name,null,C('DB_SQLSERVER'))->where(array($col_name=>'1'))->select();//从表“测试表”中查询字段"测试"=1的记录$arr = $this->row2utf8($result);dump($arr);die(dump($arr['测试']));//打印“测试”字段}
$arr和$arr['测试']均打印出来,测试通过~
0 0
- thinkphp连接sql server 2008(同时支持windows和linux环境)
- PHP在Windows、Linux环境连接SQL Server
- ThinkPHP连接SQL Server数据库
- Windows 2008服务器环境PHP连接SQL Server数据库的配置及连接方法
- 连接字符串(SQL SERVER windows)
- java连接sql server 2008和连接sql server 2008
- Linux环境使用Python连接Microsoft SQL Server
- SQL同时支持正序和倒叙
- 在Windows Server 2008 R2 Server中,连接其他服务器的数据库遇到“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。
- Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求
- 让Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求
- 让Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求
- 让Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求
- 让Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求
- 让Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求
- 让Windows Server 2008+IIS 7+ASP.NET支持10万个同时请求
- Windows Server 2008 IIS 7 ASP.NET 支持10万个同时请求
- 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万个同时请求
- G++ GCC的编译过程
- oracle substr
- Dialog
- File以及bitmap的联系
- 关于activity切换,推出和覆盖的实现和区别
- thinkphp连接sql server 2008(同时支持windows和linux环境)
- Tomcat7.0源码分析
- 变态跳台阶
- android TextView跑马灯 让字体滚动起来
- 几处错误
- Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程 .
- Android studio快捷键大全+Android studio使用小技巧
- jsp技术:day1--jsp简单用法、静态导入、动态导入、设置errorPage、<jsp:forward>
- Activity跳转