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 类型。
]
],
Yii2.0 使用createcommand从数据库查询出来的int类型变成了string型的更多相关文章
- Yii2.0连接多个数据库
Yii2.0连接多个数据库 一个项目根据需要会要求连接多个数据库,这里记录下实际项目中的操作流程.包括对数据库连接的配置以及如何生成模型文件,在控制器中加以运用. 一.配置 打开数据库配置文件c ...
- YII2.0安装教程,数据库配置前后台 [ 2.0 版本 ]
1.首先下载yii-advanced-app-2.0.6.tgz 2.解压到D:\wamp\www\yii2目录下面将目录advanced下所有文件剪切到 D:\wamp\www\yii2 3.打开c ...
- YII2.0安装教程,数据库配置前后台
1.首先下载yii-advanced-app-2.0.6.tgz 我本地服务用的是Apache 2.解压到E:\wamp\www\yii2目录下面将目录advanced下所有文件剪切到 E:\wamp ...
- 15.Yii2.0框架where单表查询
目录 新建控制器 HomeController.php 新建model article.php 新建控制器 HomeController.php D:\xampp\htdocs\yii\control ...
- 数据库查询 - DataTable转Entity类型数据
当使用Sql语句查询数据库,返回DataSet数据集. DataSet转化为数据列表,可以通过映射方式直接返回Entity数据列表 新建一个特性类,用于数据库列表列名称映射 LinqToDB提供了一个 ...
- 数据库查询性能 LinqDB vs Sql查询
使用LinqDB查询Sqlite数据库数据,不管是大数据还是少量的数据,感觉特别耗时,尤其是首次查询 一个含有2.7万条数据的数据表 首次查询: 查询2.7万条数据,耗时1s 查询指定的1条数据,也要 ...
- mysql 查询 int类型日期转换成datetime类型
数据库日期类型是int类型的,该查询结果是datetime类型的 SELECT from_unixtime( `时间列名` ) FROM 表名 如果原来类型是datetime类型,查询结果要是int类 ...
- 下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作
下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...
- Yii2.0 数据库查询 [ 2.0 版本 ]
下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...
随机推荐
- mysql 自增主键为什么不是连续的?
由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑 MyISAM 引擎的自增值保存在数据文件中 nnoDB 引擎的自增值,其实是保存在了内存里,并且到了 MySQL 8.0 ...
- expect配合shell 实现自动分发秘钥文件
expect使用场景 有时候需要批量地执行一些操作,或者执行自动化的操作的时候,有些指令需要交互式地进行这就会有很多麻烦,linux下有一个程序交expect,它可以模拟键盘输入文本,省去人工干预交互 ...
- pwn的一些环境搭建
<1>pwntools库安装 pwntools是一个CTF框架和漏洞利用开发库,用Python开发,由rapid设计,旨在让使用者简单快速的编写exploit. 本文将基于KUbuntu ...
- openldap完整版本搭建记录
文档信息 目 的:搭建一套完整的OpenLDAP系统,实现账号的统一管理. 1:OpenLDAP服务端的搭建 ...
- Cloudera Manager 安装 CDH5
文档说明 本文是针对Linux CentOS6服务器与CDH5.15的安装手册. 关于CDH和ClouderaManager CDH(Cloudera's Distribution, includin ...
- Shell学习——终端打印
1.echo1.1.默认情况下,echo在每次调用后会添加一个换行符1.2.待打印的内容,可以用单引号.双引号或者直接打印,不同的方式,有各自的限制1.2.1.使用不带引号的echo时,没法打印分好( ...
- OC中block作方法参数时的用法
方式一.在传参时直接声明block回调方法. 1. 定义方法: - (int)doTest:(NSString *)name para1:(int)temp1 para2:(int)temp2 suc ...
- 文档-linux io模式及select,poll,epoll
文档-Linux IO模式详解 1. 概念说明 在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O 1.1 用户空间与内核空间 现在操作 ...
- unity2D技术学习与整理
目前有关unity2D的教程以及原理几乎都是国外的.我在这方面也是新手,看了一些例子有很多不懂的地方. 这个网站提供的教程很有参考价值 http://brackeys.com/ 还有这个 http:/ ...
- 《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目7
2014-04-24 22:06 题目:搜索引擎问题,如果有一列100台服务器的集群,用来响应查询请求,你要如何设计query分发和cache策略? 解法:query分发可以用计算数字签名并对机器数取 ...