用PHP写的一个小程序服务端,放Linux服务器上,服务器环境如下:
PHP Version 7.0.19
Apache 2.0
mysql 5.0.12
这个环境下PHP返回的接口json数据中,价格和数量都是数字类型的,可以直接用来计算,
后来换了把代码一个服务器,也是Linux服务器,服务器环境如下:
PHP Version 7.0.30
Apache 2.0
MariaDB-5.5.56
在这个环境下,同样的代码,接口返回的数据,价格和数量等都变成了字符串,直接用来计算就会出错,在计算之前就必须要强转一下才行,请问这种问题是怎么造成的?有没有什么好的解决方案?还请各位大神指导一下~~
PHP Version 7.0.19
Apache 2.0
mysql 5.0.12
这个环境下PHP返回的接口json数据中,价格和数量都是数字类型的,可以直接用来计算,
后来换了把代码一个服务器,也是Linux服务器,服务器环境如下:
PHP Version 7.0.30
Apache 2.0
MariaDB-5.5.56
在这个环境下,同样的代码,接口返回的数据,价格和数量等都变成了字符串,直接用来计算就会出错,在计算之前就必须要强转一下才行,请问这种问题是怎么造成的?有没有什么好的解决方案?还请各位大神指导一下~~
不是PHP计算,是PHP返回Json字符串,然后小程序计算,换了服务器之后,返回的数据转换出来的类型就不一样了
书写健壮的程序,是你首要的事情
举个例子:
在测试服使用json返回:线上正式服使用json返回:看上去没多大区别,但是数字外面多了双引号,类型就变了,而且是所有的接口都是这样,一直不知道是什么原因引起的
http://php.net/manual/zh/pdo.setattribute.php解决方法也很简单
<?php
$pdo = new PDO($dsn, $user_name, $password, $param);
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
具体到你使用的框架,可以想办法重载数据库连接部分的代码可以参考如下博文
https://my.oschina.net/inuxor/blog/1541942
首先,谢谢您的回复,您的回复确实让我学到了新的东西,
不过 我这边遇到的问题是:
同样的代码,在不同服务器出现的这样的问题(代码完全一致。只是从测试服务器转到了测试服务器,唯一修改过的信息只有数据库的链接信息,修改的信息暴扣,链接地址-host,数据库名-database,用户名-username,数据库密码-password,以及端口号 -port)。
所以我觉得问题应该不在代码上,我觉得很大可能是出在服务器的环境配置或者软件版本上。 但还是谢谢你的回复
有过一个方法吧字符串变成数字 json_encode($arr,JSON_NUMERIC_CHECK); JSON_NUMERIC_CHECK (integer)
将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。
( json_encode($arr,JSON_NUMERIC_CHECK); )目前我是这么处理的,但还是很想知道到底什么原因导致了更换服务器之后 返回的数据类型发生了变化.
( json_encode($arr,JSON_NUMERIC_CHECK); )目前我是这么处理的,但还是很想知道到底什么原因导致了更换服务器之后 返回的数据类型发生了变化.你数据库不是改变了吗? 你看看是不是数据库查询出来的值变了