查询后asArray会被转义为字符串类型与数据表设置不一致的问题
关于PDO取得结果集的数据类型为string的问题
之前曾注意到过,php从数据库中取得的结果集后,其中的字段全都会变成string类型。通过ajax调取数据, 有一个type字段是int型, 没多想就在js里面写了
JavaScript Code复制内容到剪贴板
- if (data.type) {
- // do sth
- }
结果发现没进入if, debug一下发现data.type值是“0”, 才想起是数据类型的问题。
其实php经过不断的发展, 正在成为一门更完善的WEB脚本语言。详细了解后得知,早期的mysql扩展是不能获取结果集中字段的数据类型的,后来的mysqli扩展配合mysqlnd驱动则是可以的,随后的PDO扩展就更不在话下了。但是需要做一定的配置PDO::ATTR_STRINGIFY_FETCHES:
PHP Code复制内容到剪贴板
- //关闭string转换
- $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
- //关闭模拟prepare
- $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
php框架的数据库类一般也是封装的PDO, 所以对其进行相应配置即可。
YII2的配置如下:
config/main-local.php
'db' => [
'emulatePrepare' => false
即可
上面还有一个参数,设置SQL出错抛异常,yii2默认设置了
PDO::ATTR_ERRMODE
下一篇 如何升级composer