查询后asArray会被转义为字符串类型与数据表设置不一致的问题
yii2 2021-10-12 14:57:12

关于PDO取得结果集的数据类型为string的问题

之前曾注意到过,php从数据库中取得的结果集后,其中的字段全都会变成string类型。通过ajax调取数据, 有一个type字段是int型, 没多想就在js里面写了

JavaScript Code复制内容到剪贴板
  1. if (data.type) {  
  2.     // do sth    
  3. }  

 

结果发现没进入if, debug一下发现data.type值是“0”, 才想起是数据类型的问题。

 

其实php经过不断的发展, 正在成为一门更完善的WEB脚本语言。详细了解后得知,早期的mysql扩展是不能获取结果集中字段的数据类型的,后来的mysqli扩展配合mysqlnd驱动则是可以的,随后的PDO扩展就更不在话下了。但是需要做一定的配置PDO::ATTR_STRINGIFY_FETCHES:

PHP Code复制内容到剪贴板
  1. //关闭string转换  
  2. $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);  
  3. //关闭模拟prepare  
  4. $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);  

 

php框架的数据库类一般也是封装的PDO, 所以对其进行相应配置即可。

 

YII2的配置如下:

A5D982400D6B49C91CFA58BD07C36DEE.png

config/main-local.php

'db' => [

    'emulatePrepare' => false

 

即可

 

 

上面还有一个参数,设置SQL出错抛异常,yii2默认设置了

PDO::ATTR_ERRMODE

 

 

 

 

本文来自于:http://www.yoyo88.cn/study/yii2/604.html

Powered by yoyo苏ICP备15045725号