Yii2.0 使用createcommand从数据库查询出来的int类型变成了string型

  在给客户端写接口文档时,会给每个返回的字段标上数据类型,客户端会根据标注的类型来解析数据,如果标注的类型错误,会导致客户端解析出错,造成崩溃。

  一直以来我都是用的Yii进行项目的开发,之前使用Yii1.0时并没有出现这种状况,主要当时客户端也并没有强调过返回值数据类型,而且也没有出现过差错,知道这次使用Yii2.0搭建项目,在使用createCommand查询数据库数据时,客户端中定义的字段数据类型是int整型,我理所应当的认为返回回来的也必定是int整型。接口文档中定义的字段类型也就相应的是int整型,但是IOS开发人员在对接接口时出现了错误,问我XX字段的数据类型是否一定是int整型,因为他那边解析成int整型的时候报错,我当时就想,我数据库中定义的就是int整型,php又是弱类型脚本语言,他会根据上下文来解析该变量是什么数据类型,那接口文档上写的字段类型为int整型一定是正确的,我毫无犹豫的回答他,肯定是int整型。

  后来他一再的解析还是报错,于是我犹豫了,于是我将返回的值使用var_dump函数打印,得到的的的确确是string字符串型,于是我懵逼了,肿么肥事?

  再后来,我就看到了这个问答,瞬间得到解决方案:http://www.yiichina.com/question/1310?sort=desc

  看过之后恍然大悟,哦,原来如此:

  

    这个与YII没关系,是PDO的默认处理,解决方法只需在配置中的db配置中加上attributes的相关配置就行了,如下:

    'components' => [
          'db' => [
              'class' => 'yii\db\Connection',
              'dsn' => 'mysql:host=...',   'username' => '...',   'password' => '...',   'charset' => 'utf8',   'tablePrefix' => '',   'attributes' => [   PDO::ATTR_STRINGIFY_FETCHES => false,  //表示提取的时候将数值转换为字符串   PDO::ATTR_EMULATE_PREPARES => false,  //启用或禁用预处理语句的模拟,有些驱动不支持或有限度地支持本地预处理。
                              //使用此设置强制PDO总是模拟预处理语句(如果为 TRUE ),或试着使用本地预处理语句(如果为 FALSE )。
                              //如果驱动不能成功预处理当前查询,它将总是回到模拟预处理语句上。 需要 bool 类型。   ] ],

 

转载于:https://www.cnblogs.com/totian/p/8359030.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值