php 输出mysql数据库中的数值类型

众所周知,php是弱类型语言,一般情况下我们根本不关心变量是数字类型还是字符串类型,但是在某些时刻确必须要关注。当我们的api被java等强制类型的语言使用时就会出现类型不匹配的问题。这个时候对方肯定强制要求我们api返回的数据必须跟文档上所要求的一样。当然,我们也必须这样要求自己。

前段时间在了解到了这样的问题,结合自己的项目了解了下。其实从数据取出来的时候,数值类型就变成了文本,如果我在数组组装输出的时候做类型的变更,这样也是可以的,但是这样几乎所有的api或者字段要做修改,改动就非常大了,而且感觉也不太科学,凭啥我是数值,你不经允许就给我弄成字符串啦。哈哈。

于是从网上各种找资料看文档,分析得到,php是通过某种api(扩展)基于某种驱动与mysql连接通信的。其中api有三种:mysql、mysqli、pdo,驱动有两种:libmysqlclient(MySQL client server library )和mysqlnd(MySQL native driver )。

api中mysql扩展已经不被建议使用,它在5.5被废弃,而在php7中被去除。而且mysql不支持获取数值类型的数据,取出的都是字符串。mysqli和pdo中只需要做特殊的设置,即可取出数值类型。设置如下:

$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE,1);

$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

驱动程序中libmysql是不支持获取到数值类型的,只有mysqlnd支持,驱动程序在5.3之前默认使用的是libmysql,从5.3开始mysqlnd已经内置于php源代码中,我们需要在编译的时候加上,5.3之后所有的三种api的驱动都默认为mysqlnd,我们不需要做特殊处理。

所以当我们遇到数据库查出的数值类型是字符串的时候,我们可以一步步的来确定,首先判断api是不是使用的pdo或者mysqli,然后判断相应的属性是否已经设置,然后看我们的驱动是否使用的mysqlnd。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pdo类PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,...
    桖辶殇阅读 890评论 0 0
  • Welcome 目前网络上充斥着大量的陈旧信息,让PHP新手误入歧途,传播着错误的实践和糟糕的代码,这必须得到纠正...
    layjoy阅读 21,730评论 7 118
  • 学习的是知识,训练的是能力! 沟通第一要素——变态(态度)心态 主动性
    灵空_6039阅读 155评论 0 0
  • 昨日夜里我忽然梦见了他, 那种砰然心动的感觉将我从迷蒙之中唤醒。 喜欢就是喜欢, 这世界上最难掩饰的便是你喜欢一个...
    当年月芽阅读 261评论 0 0
  • 之晴: 最近情绪很低落吧,仿佛又陷入了从前那种绝望的感觉。本来抱着极大期望的心情去找我简书号,可是怎么也找不回来,...
    之晴Queen阅读 177评论 0 0