有一个Mysql包装类来支持mysqli的几个函数

时间:2012-06-06 15:35:58

标签: 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().  

E.g。使用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。这看起来更简单。

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

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

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

    有人这样做过吗?

4 个答案:

答案 0 :(得分:2)

首先至少升级到最新的5.2.x版本 - 它与你的5.2.6完全兼容,现在已经有4年了,并且有4年未修复的错误,包括安全问题。

其次,mysqli引入了许多不受mysql扩展支持的功能,你将无法使用包装器。如果你的php代码使用预处理语句,那么多个语句或事务包装器就不会这样做。

如果您应用此修复程序,Btw OpenX似乎可以与PHP 5.3一起使用:http://www.outofcontrol.ca/thoughts/comments/openx-causing-segmentation-fault-11-in-php-5-3-6 虽然开源版本似乎不再开发,但它并不适用于PHP 5.4并且我会对此表示怀疑。

答案 1 :(得分:0)

你试过PDO吗?因为您使用的是PHP 5.2和手册“PDO附带PHP 5.1,并且可用作PHP 5.0的PECL扩展”

答案 2 :(得分:0)

也许尝试 Zebra_Database 轻量级mysql database wrapper - 仅限一个文件,成熟且very well documented

答案 3 :(得分:0)

如果您进行以下更改,OpenX 2.8.10将在PHP 5.4中运行:

A)在/openx2.8.10/lib/pear/PEAR.php中更改以下内容(第335行)

function setErrorHandling($mode = null, $options = null) 

public static function setErrorHandling($mode = null, $options = null)

B)在openx2.8.10 / lib / OA / Admin / Statistics / Delivery / CommonEntity.php中更改以下内容(第294行)

$oPlugin->mergeAds($this->childrendata['ad_id']);

$oPlugin->mergeAds(&$this->childrendata['ad_id']);

C)在openx2.8.10 / lib / OA / Admin / Statistics / Delivery / CommonEntity.php中更改以下内容(第324行)

$oPlugin->mergeZones($this->childrendata['zone_id']);

$oPlugin->mergeZones(&$this->childrendata['zone_id']);

通过此更改,OpenX及其stadistics页面将在PHP 5.4中提供