关于PDO取得结果集的数据类型为string的问题
很久没写些什么了, 正好今天工作中遇到了以前在意过的问题。
之前曾注意到过,php从数据库中取得的结果集后,其中的字段全都会变成string类型。今儿通过ajax调取数据, 有一个type字段是int型, 没多想就在js里面写了
if (data.type) { // do sth }
结果发现没进入if, debug一下发现data.type值是“0”, 才想起是数据类型的问题。
其实php经过不断的发展, 正在成为一门更完善的WEB脚本语言。详细了解后得知,早期的mysql扩展是不能获取结果集中字段的数据类型的,后来的mysqli扩展配合mysqlnd驱动则是可以的,随后的PDO扩展就更不在话下了。但是需要做一定的配置:
//关闭string转换 $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); //关闭模拟prepare $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
php框架的数据库类一般也是封装的PDO, 所以对其进行相应配置即可。
经过测试,确定Laravel是以此作为默认设置的, 而Yii2不是。