简而言之
我们需要从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,它使用以下内容:
所以,我们有两个选择 -
升级PHP - 但是,这需要大量的回归测试,因为我们使用的OpenX版本似乎没有针对这些最新的PHP版本进行测试。我们的系统核心在于Openx。
编写一个包装类,使其具有与MySQLi相同的面向对象的API。这看起来更简单。
因此,我们决定估计提出包装类所需的工作量。这就是我们的想法 -
由于PHP仅为其mysql扩展提供过程接口,而TeraWurflDatabase_MySQL5.php
以面向对象的方式调用mysqli的函数,因此我们必须创建一个包装类,它将提供与mysqli类相同的接口,以便切换到mysql。
我们可以使用与mysqli中相同的名称创建函数,例如query(),store_result()并返回类似的参数,以便我们只需要更改TeraWurflDatabase_MySQL5.php
文件中的对象启动。
有人这样做过吗?
答案 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中提供