如何在PHP中“禁用”mysqlnd本机类型转换支持

时间:2017-09-08 07:01:19

标签: php mysqlnd libmysql

背景故事

我们正在CentOS 6平台上将我们的项目代码库从PHP 5.3迁移到PHP 7.0。

旧堆栈使用Apache与PHP 5.3 libphp模块+ libmysql,新堆栈使用Nginx与PHP 7.0 FPM + mysqlnd。

我们将它们配置为并行运行,以便在准备好所有内容后轻松切换到新版本(感谢SCL)。

问题(ish)部分

mysqlnd的一个不错的功能是它能够自动返回数据库中使用的正确类型的数据库字段(VARCHAR为字符串,MEDIUMINT为整数等)。

但遗憾的是,这种做法对我们不利。

该项目的一部分是为本地应用程序(Android和iOS)提供API服务,以便与我们系统中的其他各种服务进行通信。

由于过去几年的一些糟糕的设计决策(我无法控制),因为libmysql支持这一点,一些整数会作为字符串发送到移动应用程序。因此,当我们切换PHP系统时,它开始打破我们的移动应用程序,因为类型不再匹配。

为了避免升级中的任何进一步延迟,因为我们的最终用户可能需要数月才能升级他们的移动应用程序,这些应用程序会修复这些问题,我们开始研究如何以某种方式回归旧的返回方式一切都是mysqlnd中数据库的字符串。

到目前为止,我的谷歌搜索还没有产生任何信息性的结果。我也开始认为这是mysqlnd的一个设计方面,它无法真正实现。

最后是我的问题

我猜有很多人经历过类似的升级过程,所以我想就你可能遇到的障碍提出任何建议。

是否可以“禁用”自动类型转换为PHP?是否有任何可行的解决方法来保留移动应用程序的代码库支持(除了通过API代码库并将所有内容都转换回字符串)?

0 个答案:

没有答案