php - 有一个Mysql包装类来支持mysqli的一些功能

标签 php mysql mysqli wrapper

简述
我们需要从 mysqli 切换到 mysql。我们想要一个包装类,它使用 PHP 的 mysql 扩展函数,但支持 mysqli 的以下函数的功能 -

query(), real_escape_string(), multi_query(), store_result(), more_results() , next_result(), use_result(), mysqli_connect_error().  

例如使用 mysql_pconnect() 进行持久连接。

基本上,要确保所有函数具有相同的逻辑和返回类型,我们必须根据所有相关函数的文档进行验证,并且可能还必须研究 mysqli 函数的实现。

但是,有人想出类似的东西吗?

背景
我们使用Tera-WURFL在我们的移动设备检测系统中。我们遇到了一些问题,因为我们的生产 PHP 版本是 5.2.6,而 TeraWurfl 使用数据库连接器 TeraWurflDatabase_MySQL5.php,该连接器使用以下内容:

  • mysqli_connect_error(),直到 php 5.2.9 才支持(我们使用 php 5.2.6)
  • php 5.3.0 之前不支持持久连接(我们使用 php 5.2.6)

直到 php 5.3.0 才完全支持 mysqli。

所以,我们有两个选择 -

  1. 升级 PHP - 但是,这需要大量的回归测试,因为我们使用的 OpenX 版本似乎没有针对这些最新的 PHP 版本进行测试。我们系统的核心是Openx。

  2. 编写一个包装类,使其具有与 MySQLi 相同的面向对象 API。这看起来更简单。

因此,我们决定估计提出一个包装类所需的工作量。这是我们的想法 -

由于 PHP 仅为其 mysql 扩展提供过程接口(interface),并且 TeraWurflDatabase_MySQL5.php 以面向对象的方式调用 mysqli 的函数,因此我们必须创建一个包装类,它将提供与 mysqli 相同的接口(interface)类,以便切换到mysql。

我们可以创建与 mysqli 中同名的函数,例如query()、store_result() 并返回类似的参数,因此我们只需更改 TeraWurflDatabase_MySQL5.php 文件中的对象启动即可。

有人做过吗?

最佳答案

首先,至少升级到最新的 5.2.x 版本 - 它与您的 5.2.6 完全兼容,顺便说一句,该版本已经有 4 年历史,并且有 4 年未修复的错误,包括安全问题。

其次,mysqli 引入了许多 mysql 扩展不支持的功能,您将无法使用包装器来解决这些功能。如果您的 php 代码使用准备好的语句,则多个语句或事务包装器将不起作用。

顺便说一句,如果您应用此修复程序,OpenX 似乎可以与 PHP 5.3 一起使用:http://www.outofcontrol.ca/thoughts/comments/openx-causing-segmentation-fault-11-in-php-5-3-6 它不适用于 PHP 5.4,我严重怀疑它是否会如此,因为开源版本似乎不再开发。

关于php - 有一个Mysql包装类来支持mysqli的一些功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10917462/

相关文章:

mysql - 按月和年创建sql表

php - 上传文件到 MySQL blob 字段 file_get_contents() : failed (from input type ="file")

php - 多个mysqli对象相互覆盖

javascript - 将 Excel 列映射到父子 JSON

php - 使用 AWS SES 和 PHP 发送电子邮件

php - MYSQL 选择 'random' 行,但如果再次调用,总是给出相同的随机行

php - 仅当数据存在于另一个 PHP 中时如何在表中插入数据

php - 在 MySQL 中为 Symfony 重建模型而不丢失数据

php - 从 PHP 向 SQL 插入 DATETIME

php - 从数据库中的单个单元格获取多个数据