当前位置:首页 > 问答 > 正文

PHP5.5那些新玩意儿让MSSQL连接快了不少,php55-mssql真有戏

(来源:PHP 5.5 发布说明和变更日志,以及当时开发者社区的实践反馈)

PHP5.5那些新玩意儿让MSSQL连接快了不少,php55-mssql真有戏

PHP 5.5 发布的时候,确实在跟MSSQL数据库打交道这方面带来了一些实实在在的改进,让不少用PHP连接SQL Server的开发者感觉“快了不少”,虽然那个叫“php55-mssql”的玩意儿,现在听起来可能有点历史感了,但在当时的环境下,它确实让一些人看到了新的希望,咱们就掰开揉碎了说说,到底是哪些新玩意儿起了作用。

最核心的一点是,PHP 5.5 继续并加强了对 Windows SQL Server 原生驱动(Windows SQLSRV驱动) 的支持。(来源:微软PHP驱动文档)这个驱动跟以前那个老旧的、功能有限的mssql扩展可不是一回事,这个原生驱动是由微软自己开发和维护的,它不依赖于像FreeTDS那样的第三方库,而是直接调用Windows系统自带的ODBC接口和SQL Server本地客户端库,这就好比以前你要去一个地方,得换好几趟公交车,路况复杂还容易堵车;现在直接修了一条高速公路,还给你配了专车,速度自然就上去了,这个驱动在连接稳定性、数据处理效率以及对SQL Server高级功能(比如新数据类型、错误处理)的支持上,都比老的扩展强太多了,PHP 5.5 时代,这个驱动已经相对成熟,性能和可靠性都有了显著提升,所以很多开发者从老的mssql扩展或者不太稳定的PDO_ODBC方式迁移过来,感觉就像是鸟枪换炮。

PHP5.5那些新玩意儿让MSSQL连接快了不少,php55-mssql真有戏

PHP 5.5 本身在性能上的整体优化也惠及了数据库连接。(来源:PHP内部优化报告)每一个PHP新版本的发布,Zend引擎底层都会做一些优化,比如更高效的内存管理、更快的函数调用机制等,这些改进是全局性的,意味着所有扩展,包括数据库连接扩展,都能间接受益,当驱动扩展本身在执行、处理数据时,底层的PHP引擎更快了,整个数据交换的流程也就变得更加顺畅,虽然可能不像驱动升级带来的提升那么立竿见影,但这种“水涨船高”的效果,累积起来也是不可忽视的。

再来说说PDO(PHP Data Objects)的巩固。(来源:PHP手册PDO章节)PHP 5.5 时期,PDO作为数据库访问的推荐抽象层,地位更加稳固,对于MSSQL来说,虽然原生的SQLSRV驱动很好,但PDO提供了一个统一的接口,如果你使用PDO_ODBC来连接MSSQL,那么在PHP 5.5中,由于底层ODBC层和PHP与ODBC交互的效率可能有所改善,同样能感受到一些性能上的好处,更重要的是,PDO提供了预处理语句的良好支持,这能有效防止SQL注入攻击,并且对于需要重复执行的查询,预处理语句本身就能带来性能提升,因为数据库服务器只需要对查询语句编译一次,PHP 5.5 确保了这一机制更加可靠和高效。

然后不得不提的是对现代网络环境和协议更好的兼容性。(来源:开发者社区问题追踪)随着时间推移,网络环境和数据库服务器版本都在升级,老的mssql扩展可能在一些新的网络配置或高版本的SQL Server面前显得力不从心,甚至出现连接失败、数据传输慢的问题,而PHP 5.5时代主推的SQLSRV驱动,在设计之初就考虑到了这些新情况,能够更好地处理加密连接、更高效地管理网络数据包,从而减少了网络延迟带来的开销。

聊聊你提到的“php55-mssql”这个说法。(来源:各类Linux发行版软件包命名习惯)它通常指的是Linux发行版(比如CentOS、Ubuntu)软件仓库里为PHP 5.5版本提供的那个用于连接MSSQL的扩展包,这个名字容易引起混淆,因为它可能指代两个东西:一个是前面说的已经过时的、传统的mssql扩展;另一个更可能是指为了在PHP 5.5上编译安装而打包的、基于FreeTDS的改进版本,或者干脆就是个误导性的包名,实际包含的是微软SQLSRV驱动或PDO_ODBC的支持组件,在当时,如果这个包确实提供了一个稳定、更新版本的FreeTDS库或配置优化,那么相比在旧版PHP上手动编译安装,它确实能带来更简单的部署和可能更好的性能。“真有戏”这个说法,反映了开发者们渴望找到一个简单、可靠、高效的方式来连接MSSQL的心态,而PHP 5.5及其周边生态的进步,在一定程度上满足了这种需求。

PHP 5.5让MSSQL连接“快了不少”,并不是靠某一个“银弹”,而是多种因素叠加的结果:微软官方原生驱动的成熟和普及是主因,提供了直达高速路的通道;PHP引擎自身的性能提升奠定了更好的基础;PDO抽象层的完善带来了更安全、规范的编程方式;对现代网络环境的更好适应减少了不必要的延迟。“php55-mssql”这个概念背后,反映的是那个时期PHP连接MSSQL技术栈的整体进化,让开发者们终于可以更省心、更高效地与SQL Server数据库进行交互了。

PHP5.5那些新玩意儿让MSSQL连接快了不少,php55-mssql真有戏