php - mysqli 和 pdo 查询出来的类型转换
阿神
阿神 2017-04-10 16:47:02
[PHP讨论组]
  1. 一直有一个问题,就是PHP用mysqli还是pdo,查询出来的结果都是int类型的数据会自动变成string类型,PHP本身弱类型。但是现在写api,直接从数据库里查出来的结果,然后json_encode 返回给客户端是不行的。java 和 oc 都是强类型 数字就是数字,字符串就是字符串。123 != "123"

这个是程序代码,用的mysqli类

这个是表结构

这个是查询 出来的结果

  1. google 了好多说法,pdo倒是有解决的方法pdo查询int转换成string的问题。但是mysqli没找到,而且不知道这个究竟是什么问题。或者是有没有一些现成的类库,可以自动转换的。

阿神
阿神

闭关修行中......

全部回复(1)
PHP中文网

关闭模拟预处理时,能保持数据类型,但某些类型,输出的数据跟数据库里的值不一致:
比如float(9,2)类型的字段,字段内容为32.10,PDO关闭模拟预处理时读到的值为32.099998474121,类型为float.
也就是说开启PDO模拟预处理(默认),返回的数据类型都是string,值跟数据库存储的内容一致.
MySQL服务器没有使用预处理时,返回的是string类型的数据.

MySQLi不使用prepare查询返回的字段类型全部是string,值跟数据库存储的内容一致.
使用prepare时跟pdo_mysql关闭模拟预处理一样,返回对应类型的数据(decimal类型依旧是字符串),而且float类型的值也存在不一致.

所以,数据库中带有小数点的数据,建议使用字符串类型或decimal类型保存.

类型转换:
settype($foo, "array");
settype($foo, "bool");
settype($foo, "boolean");
settype($foo, "float");
settype($foo, "int");
settype($foo, "integer");
settype($foo, "null");
settype($foo, "object");
settype($foo, "string");
$foo = (array)$foo;
$foo = (b)$foo; // from PHP 5.2.1
$foo = (binary)$foo; // from PHP 5.2.1
$foo = (bool)$foo;
$foo = (boolean)$foo;
$foo = (double)$foo;
$foo = (float)$foo;
$foo = (int)$foo;
$foo = (integer)$foo;
$foo = (object)$foo;
$foo = (real)$foo;
$foo = (string)$foo;

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号