用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
在这个环境下,同样的代码,接口返回的数据,价格和数量等都变成了字符串,直接用来计算就会出错,在计算之前就必须要强转一下才行,请问这种问题是怎么造成的?有没有什么好的解决方案?还请各位大神指导一下~~

解决方案 »

  1.   

    php 是弱类型的,并不需要强制转换
      

  2.   


    不是PHP计算,是PHP返回Json字符串,然后小程序计算,换了服务器之后,返回的数据转换出来的类型就不一样了
      

  3.   

    那就是你自己的事情了,与 php
    书写健壮的程序,是你首要的事情
      

  4.   

    Json处理字符串应该会把数字型转换成字符型吧,难道我记错了?
      

  5.   

    php数组里边存的是整数还是字符串?
      

  6.   

    数组里面的数据是直接从数据库查询出来的,有整数,小数和字符串。
    举个例子:
    在测试服使用json返回:线上正式服使用json返回:看上去没多大区别,但是数字外面多了双引号,类型就变了,而且是所有的接口都是这样,一直不知道是什么原因引起的
      

  7.   

    这是PDO的问题可以在php手册找到答案
    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
      

  8.   


    首先,谢谢您的回复,您的回复确实让我学到了新的东西,
    不过 我这边遇到的问题是:
          同样的代码,在不同服务器出现的这样的问题(代码完全一致。只是从测试服务器转到了测试服务器,唯一修改过的信息只有数据库的链接信息,修改的信息暴扣,链接地址-host,数据库名-database,用户名-username,数据库密码-password,以及端口号 -port)。
          所以我觉得问题应该不在代码上,我觉得很大可能是出在服务器的环境配置或者软件版本上。  但还是谢谢你的回复
      

  9.   

    这个你应该看一下  是查询数据库的 时候 变成字符串 了还是 其他时候
    有过一个方法吧字符串变成数字  json_encode($arr,JSON_NUMERIC_CHECK); JSON_NUMERIC_CHECK (integer)
    将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。
      

  10.   


    ( json_encode($arr,JSON_NUMERIC_CHECK); )目前我是这么处理的,但还是很想知道到底什么原因导致了更换服务器之后 返回的数据类型发生了变化.
      

  11.   


    ( json_encode($arr,JSON_NUMERIC_CHECK); )目前我是这么处理的,但还是很想知道到底什么原因导致了更换服务器之后 返回的数据类型发生了变化.你数据库不是改变了吗? 你看看是不是数据库查询出来的值变了