技术领域
[0001] 本
发明涉及计算机
软件领域,尤其涉及一种PHP环境中兼容多版本数据库的方法及终端。
背景技术
[0002] 目前,在PHP5.3以上的版本中默认为MYSQLND驱动,使用PHP数据对象连接MYSQL4.0版本的数据库时,由于PHP5.3以上的版本与MYSQL4.0版本的数据库兼容性的问题导致禁止
访问。但是目前仍然存在一部分
网站的数据库仍然在使用MYSQL4.0版本的数据库,这导致了PHP的版本受限不能升级,因而存在版本漏洞和安全隐患,性能得不到提升,无法进一步扩展,影响网站
框架的升级和安全。
[0003] 但是大多数公司由于历史原因各系统仍在使用MYSQL4.0版本的数据库,若统一升级MYSQL数据库至最新版本,则会因为版本差异较大,导致数据迁移困难,同时也影响系统的
稳定性,导致实现代价比较昂贵。
[0004] 因此,在PHP环境下如何切换连接不同版本的数据库成了一个亟待解决的问题。
发明内容
[0005] 本发明所要解决的技术问题是:提供一种PHP环境中兼容多版本数据库的方法及终端,在PHP环境中可随时切换连接不同版本的数据库。
[0006] 为了解决上述技术问题,本发明采用的技术方案为:
[0007] 一种PHP环境中兼容多版本数据库的方法,包括步骤:
[0008] S1、为所述PHP增设新驱动,并将所述新驱动使用的引擎指向低版本数据库的驱动;
[0009] S2、通过所述低版本数据库的驱动与低版本数据库连接。
[0010] 为了解决上述技术问题,本发明采用的另一种技术方案为:
[0011] 一种PHP环境中兼容多版本数据库的终端,包括
存储器、处理器及存储在存储器上并可在处理器上运行的
计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0012] S1、为所述PHP增设新驱动,并将所述新驱动使用的引擎指向低版本数据库的驱动;
[0013] S2、通过所述低版本数据库的驱动与低版本数据库连接。
[0014] 本发明的有益效果在于:通过为所述PHP增设新驱动,并将所述新驱动使用的引擎指向低版本数据库的驱动,通过所述低版本数据库的驱动与低版本数据库连接;从而实现在在PHP环境中可随时切换连接不同版本的数据库,避免因连接的数据库版本较低而影响后续PHP版本无法升级,提高了PHP环境的性能及稳定性,并且可以根据最新的PHP版本的更新进行打
补丁更新,提高了
站点的安全性;在升级PHP版本时,不需要对低版本的数据进行数据迁移,降低了开发和维护成本。
附图说明
[0015] 图1为本发明
实施例的PHP环境中兼容多版本数据库的方法
流程图;
[0016] 图2为本发明实施例的PHP环境中兼容多版本数据库的终端的结构示意图;
[0017] 图3为本发明实施例的PHP环境中兼容多版本数据库的方法的细节流程图;
[0018] 图4为本发明实施例的PHP环境中兼容多版本数据库的方法中驱动与数据库的适配示意图;
[0019] 标号说明:
[0020] 1、PHP环境中兼容多版本数据库的终端;2、存储器;3、处理器。
具体实施方式
[0021] 为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
[0022] 本发明最关键的构思在于:通过为所述PHP增设新驱动,并将所述新驱动使用的引擎指向低版本数据库的驱动,实现在该PHP环境中可随时切换连接不同版本的数据库。
[0023] 请参照图1,一种PHP环境中兼容多版本数据库的方法,包括步骤:
[0024] S1、为所述PHP增设新驱动,并将所述新驱动使用的引擎指向低版本数据库的驱动;
[0025] S2、通过所述低版本数据库的驱动与低版本数据库连接。
[0026] 从上述描述可知,本发明的有益效果在于:通过为所述PHP增设新驱动,并将所述新驱动使用的引擎指向低版本数据库的驱动,通过所述低版本数据库的驱动与低版本数据库连接;从而实现在在PHP环境中可随时切换连接不同版本的数据库,避免因连接的数据库版本较低而影响后续PHP版本无法升级,提高了PHP环境的性能及稳定性,并且可以根据最新的PHP版本的更新进行打补丁更新,提高了站点的安全性;在升级PHP版本时,不需要对低版本的数据进行数据迁移,降低了开发和维护成本。
[0027] 进一步的,所述S1具体包括:
[0028] S11、编译一个无扩展的PHP版本;
[0029] S12、将所述无扩展的PHP版本的原生驱动的驱动注册名称
修改成与所述低版本数据库的驱动适配的名称,并相应修改对应的PHP扩展模
块的名称;
[0030] S13、将所述PHP拓展模块中的驱动使用的引擎指向低版本数据库的驱动的lib包,并对所述PHP扩展模块进行编译,得到编译完成后的文件;
[0031] S14、将所述编译完成后的文件引入所述PHP环境中。
[0032] 由上述描述可知,通过编译无扩展的PHP避免因PHP版本编译过存在软连接缓存,导致lib指向异常的情况;通过对应修改所述驱动注册名称和PHP扩展模块的名称,避免在应用拓展时与预设的PHP环境中的驱动与拓展模块出现冲突;通过将所述引擎指向低版本数据库的驱动的lib包,实现与低版本数据库的连接;通过将所述编译完成后的文件引入所述PHP环境中,实现了在所述PHP环境中可以随时切换连接不同版本的数据库。
[0033] 进一步的,所述步骤S2包括:
[0034] 通过所述低版本数据库的驱动的lib包与低版本数据库连接。
[0035] 由上述描述可知,通过所述低版本数据库的驱动的lib包与低版本数据库连接,而所述PHP拓展模块中的驱动使用的引擎指向低版本数据库的驱动的lib包,实现了所述PHP拓展模块中的驱动与低版本数据的连接。
[0036] 进一步的,在所述步骤S12和S13之间还包括:
[0037] 在所述PHP扩展模块中新增用于设置数据库的安全认证参数的变量,并注册所述变量,使得所述变量能够为外部所调用。
[0038] 由上述描述可知,通过在PHP扩展模块中新增并注册用于设置数据库的安全认证参数的变量,解决了对低版本安全认证的兼容问题。
[0039] 进一步的,所述步骤S13中还包括:
[0040] 根据所述低版本数据库的驱动的名称,对应修改所述编译完成后的文件的文件名。
[0041] 由上述描述可知,通过修改所述编译完成后的文件的文件名与所述低版本数据库的驱动的名称相对应,避免因文件名不匹配产生与低版本数据库的连接冲突。
[0042] 请参照图2,一种PHP环境中兼容多版本数据库的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0043] S1、为所述PHP增设新驱动,并将所述新驱动使用的引擎指向低版本数据库的驱动;
[0044] S2、通过所述低版本数据库的驱动与低版本数据库连接。
[0045] 从上述描述可知,本发明的有益效果在于:通过为所述PHP增设新驱动,并将所述新驱动使用的引擎指向低版本数据库的驱动,通过所述低版本数据库的驱动与低版本数据库连接;从而实现在在PHP环境中可随时切换连接不同版本的数据库,避免因连接的数据库版本较低而影响后续PHP版本无法升级,提高了PHP环境的性能及稳定性,并且可以根据最新的PHP版本的更新进行打补丁更新,提高了站点的安全性;在升级PHP版本时,不需要对低版本的数据进行数据迁移,降低了开发和维护成本。
[0046] 进一步的,所述S1具体包括:
[0047] S11、编译一个无扩展的PHP版本;
[0048] S12、将所述无扩展的PHP版本的原生驱动的驱动注册名称修改成与所述低版本数据库的驱动适配的名称,并相应修改对应的PHP扩展模块的名称;
[0049] S13、将所述PHP拓展模块中的驱动使用的引擎指向低版本数据库的驱动的lib包,并对所述PHP扩展模块进行编译,得到编译完成后的文件;
[0050] S14、将所述编译完成后的文件引入所述PHP环境中。
[0051] 由上述描述可知,通过编译无扩展的PHP避免因PHP版本编译过存在软连接缓存,导致lib指向异常的情况;通过对应修改所述驱动注册名称和PHP扩展模块的名称,避免在应用拓展时与预设的PHP环境中的驱动与拓展模块出现冲突;通过将所述引擎指向低版本数据库的驱动的lib包,实现与低版本数据库的连接;通过将所述编译完成后的文件引入所述PHP环境中,实现了在所述PHP环境中可以随时切换连接不同版本的数据库。
[0052] 进一步的,所述步骤S2包括:
[0053] 通过所述低版本数据库的驱动的lib包与低版本数据库连接。
[0054] 由上述描述可知,通过所述低版本数据库的驱动的lib包与低版本数据库连接,而所述PHP拓展模块中的驱动使用的引擎指向低版本数据库的驱动的lib包,实现了所述PHP拓展模块中的驱动与低版本数据的连接。
[0055] 进一步的,在所述步骤S12和S13之间还包括:
[0056] 在所述PHP扩展模块中新增用于设置数据库的安全认证参数的变量,并注册所述变量,使得所述变量能够为外部所调用。
[0057] 由上述描述可知,通过在PHP扩展模块中新增并注册用于设置数据库的安全认证参数的变量,解决了对低版本安全认证的兼容问题。
[0058] 进一步的,所述步骤S13中还包括:
[0059] 根据所述低版本数据库的驱动的名称,对应修改所述编译完成后的文件的文件名。
[0060] 由上述描述可知,通过修改所述编译完成后的文件的文件名与所述低版本数据库的驱动的名称相对应,避免因文件名不匹配产生与低版本数据库的连接冲突。
[0061] 请参照图1、图3和图4,本发明的实施例一为:
[0062] 将本发明的技术方案应用到具体场景中,某站点使用的是PHP5.3以上的版本且后续或需要进行升级,根据业务需求需要同时连接操作MYSQL4.0及其以上版本的MYSQL数据库;
[0063] 执行以下PHP环境中兼容多版本数据库的方法,包括步骤:
[0064] S1、为所述PHP增设新驱动,并将所述新驱动使用的引擎指向低版本数据库的驱动;
[0065] 具体的:
[0066] S11、编译一个无扩展的PHP版本;
[0067] 具体包括:先下载PHP源码,进行无扩展编译和安装;
[0068] S12、将述无拓展的PHP版本的原生驱动的驱动注册名称修改为libmysql,该名称与MYSQL4.0版本数据库的驱动名称相适配,MYSQL4.0版本数据库的驱动名称也为libmysql,将PHP扩展模块的名称“pdo_mysql”修改为“pdo_libmysql”;
[0069] 还包括:将常量前缀MYSQL修改为LIBMYSQL;
[0070] 在所述PHP扩展模块中增设用于设置MYSQL数据库的安全认证参数的变量PDO_MYSQL_SECURE_AUTH用于兼容低版本的安全认证,并注册所述变量,使得所述变量能够为外部所调用;
[0071] 其中,所述变量PDO_MYSQL_SECURE_AUTH设置了MYSQL的secure_auth参数,为了防止低版本的MYSQL客户端(小于4.1版本的MYSQL客户端)使用旧的密码认证方式访问高版本的
服务器,MySQL5-7版本的数据库中secure_auth默认的启用值为1;
[0072] 其中,启用值为0时,则old_password()加密结果是16位,password()加密结果是41位
[0073] 启用值为1时,则old_password()和password()加密结果相同都是16位;
[0074] 当低版本的MYSQL客户端访问高版本的服务器时,设置所述变量PDO_MYSQL_SECURE_AUTH中的secure_auth参数值为1;
[0075] 其中,参照图4所示,MYSQL官方提供了连接MYSQL的lib包,pdo_libmysql是通过libmysql的lib包与MYSQL4.0版本的数据库进行通信交互;原生的pdo_mysql是通过mysqlnd的lib包与MYSQL4.0以上版本的数据库进行通信交互;
[0076] S13、将所述PHP拓展模块中的驱动使用的引擎指向MYSQL官网中MYSQL4.0版本驱动的lib包,并对所述PHP扩展模块进行编译,得到编译完成后的文件;
[0077] 根据所述MYSQL4.0版本驱动的名称,将编译完成的文件pdo_mysql.so修改名称为pdo_libmysql.so;
[0078] S14、将所述编译完成后的文件引入所述PHP环境中。
[0079] 具体为:将所述pdo_libmysql.so文件复制到所述PHP环境中,并按照PHP应用扩展的方式进行引入,即引入之后,所述PHP环境就包括双驱动,一个驱动用于连接高版本数据库,另一个驱动用于连接低版本数据库。
[0080] S2、通过所述低版本数据库的驱动与低版本数据库连接。
[0081] 具体为:
[0082] 通过所述MYSQL4.0版本的数据库驱动的lib包与MYSQL4.0版本的数据库连接。
[0083] 另外,在连接不同版本的MYSQL数据库的DSN写法上,有所区分:
[0084] 当连接的是MYSQL4.0版本的官方驱动时,DSN写法为libmysql:host=127.0.0.1,即连接指向MYSQL官方提供的驱动libmysql;
[0085] 当连接的是MYSQL4.0以上版本的原生驱动mysqlnd时,DSN写法为mysql:host=127.0.0.1,即指向原生驱动mysqlnd;
[0086] 从而可以在PHP5.3版本以上或后续继续升级PHP的情况下可随时切换连接低高两种版本的数据库。
[0087] 请参照图2,本发明的实施例二为:
[0088] 一种PHP环境中兼容多版本数据库的终端,包括存储器2、处理器3及存储在存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例一中的步骤。
[0089] 综上所述,本发明提供的PHP环境中兼容多版本数据库的方法及终端,通过为所述PHP增设新驱动,并将所述新驱动使用的引擎指向低版本数据库的驱动,通过所述低版本数据库的驱动与低版本数据库连接;从而实现在在PHP环境中可随时切换连接不同版本的数据库,避免因连接的数据库版本较低而影响后续PHP版本无法升级,提高了PHP环境的性能及稳定性,在升级PHP版本时,不需要对低版本的数据进行数据迁移,降低了开发和维护成本,并且可以根据最新的PHP版本的更新进行打补丁更新,提高了站点的安全性;其中,通过编译无扩展的PHP避免因PHP版本编译过存在软连接缓存导致lib指向异常的情况;并对应修改所述驱动注册名称、PHP扩展模块的名称和编译完成后的文件的文件名,避免在应用拓展时与预设的PHP环境中的驱动与拓展模块出现冲突;通过在PHP扩展模块中新增并注册用于设置数据库的安全认证参数的变量,解决了对低版本安全认证的兼容问题。
[0090] 以上所述仅为本发明的实施例,并非因此限制本发明的
专利范围,凡是利用本发明
说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。