背景故事
我们正在将我们的项目代码库从 PHP 5.3 迁移到 CentOS 6 平台上的 PHP 7.0。
旧堆栈使用带有 PHP 5.3 libphp 模块 + libmysql 的 Apache,新堆栈使用带有 PHP 7.0 FPM + mysqlnd 的 Nginx。
我们将它们配置为并行运行,以便在一切准备就绪时轻松切换到新版本(感谢 SCL)。
问题(ish)部分
mysqlnd 的一个很好的特性是它能够自动返回数据库中使用的正确类型的数据库字段(VARCHAR 作为字符串,MEDIUMINT 作为整数等)。
不过,可悲的是,这有点不利于我们。
该项目的一部分是为原生应用程序(Android 和 iOS)提供 API 服务,以便与我们系统中的其他各种服务进行通信。
由于过去几年的一些糟糕的设计决策(我无法控制),由于 libmysql 支持这一点,一些整数作为字符串发送到移动应用程序。因此,当我们切换 PHP 系统时,它开始破坏我们的移动应用程序,因为类型不再匹配。
为了避免升级中的任何进一步延迟,因为我们的最终用户可能需要几个月的时间来升级他们的移动应用程序来修复这些问题,我们开始研究如何以某种方式回到以字符串形式返回所有内容的旧方式从mysqlnd中的数据库。
到目前为止,我的谷歌搜索还没有产生任何有用的结果。我也开始认为这是 mysqlnd 的设计方面,它无法真正实现。
所以最后我的问题
我猜有不少人经历过类似的升级过程,所以我想就您可能遇到的障碍提出任何建议。
是否可以“禁用”对 PHP 的自动类型转换?是否有任何可行的解决方法来保留对移动应用程序的代码库支持(除了通过 API 代码库并将所有内容转换回字符串)?