2

简而言之
,我们需要从 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 扩展提供过程接口并TeraWurflDatabase_MySQL5.php以面向对象的方式调用 mysqli 的函数,因此我们必须创建一个包装类,该类将提供与 mysqli 类相同的接口,以便切换到 mysql。

我们可以创建与 mysqli 中名称相同的函数,例如 query()、store_result() 并返回类似的参数,这样我们只需要更改TeraWurflDatabase_MySQL5.php文件中的对象初始化。

有人做过吗?

4

4 回答 4

2

首先至少升级到最新的 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 它没有t 与 PHP 5.4 一起工作,我严重怀疑它永远不会,因为似乎不再开发开源版本。

于 2012-06-06T21:46:39.660 回答
0

你试过PDO吗?由于您使用 php 5.2 和手册“PDO 随 PHP 5.1 提供,并且可作为 PHP 5.0 的 PECL 扩展使用”

于 2012-06-06T20:39:17.227 回答
0

也许可以试试Zebra_Database一个轻量级的mysql 数据库包装器- 只有一个文件,成熟且有据可查

于 2012-07-31T17:14:55.843 回答
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 及其统计页面将在 PHP 5.4 中可用

于 2013-04-09T14:37:41.797 回答