欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于TP3.2框架读取Sql server中文字段数据以及处理乱码的一些小心得

程序员文章站 2022-06-12 07:59:54
最近要做一个项目,需要使用TP3.2框架,之前什么也不会,就硬着头皮上了,结果真的闹了挺多emmmmmm挺低级的错误,就像SQL Server中文字段的读取,一开始我是照着读取英文字段的格式来写的,在Model层里 然后我试着传了一个中文值 '欢送' 进去,但是这样做的结果 提示列名‘欢送’无效,我 ......

最近要做一个项目,需要使用tp3.2框架,之前什么也不会,就硬着头皮上了,结果真的闹了挺多emmmmmm挺低级的错误,就像sql server中文字段的读取,一开始我是照着读取英文字段的格式来写的,在model层里

 public function getadminbyusername($username='') {
        $res = $this->_db->where('username="'.$username.'"')->select();
        return $res;
    }

然后我试着传了一个中文值 '欢送' 进去,但是这样做的结果

关于TP3.2框架读取Sql server中文字段数据以及处理乱码的一些小心得

提示列名‘欢送’无效,我照着提示的错误去搜索,但是搜索到的结果跟我想要的并不一样,我觉得我的格式没问题啊,输入的字符串,所以在where里面也是做了对应的处理的

我找了一天多也没找到解决方法,就很难过。

最后发现错误的原因比较偶然,我在四处搜索时候看到了这个,忘了是哪里看到的了

$map['acct']=acct;
$res=$this_db->where($map)->select(); 

然后模仿它的格式,把自己的代码改成这样

 public function getadminbyusername($username='') {
        $map['j名']=$username;
        $res = $this->_db->where($map)->select();
        return $res;
    }

就是把中文字段存入到数组的值里面去,然后放入where中,这样就可以读出数据来了。但是读出来的数据,用var_dump输出,一般的话要么字段乱码数据不乱码,要么数据乱码字段不乱码。这个时候需要用两重foreach进行转码,把对应乱码的数据转码就正常了

foreach ($result as $key => $value) {
            foreach ($value as $k1 => $v1) {
                $k1=iconv("gbk","utf-8",$k1);
                $arr[$key][$k1]=$v1;
            }
        }

函数主体是这样,在读完数据以后调用一次函数,就可以解决乱码了

 


 

这两个问题困扰了我一个星期,现在想想,还是自己真的对tp3.2框架一点都不了解才会这样,很基础的错误,在这里写出来希望以后看到自己的文章还会想起这段无头苍蝇乱飞的日子

2018-11-22