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

Php 有一个Mysql包装类来支持mysqli的一些功能,php,mysql,mysqli,wrapper,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切换到mysql。我们需要一个包装类,它使用PHP的mysql扩展函数,但支持mysqli的以下函数的功能-

query(), real_escape_string(), multi_query(), store_result(), more_results() , next_result(), use_result(), mysqli_connect_error().  
例如,使用mysql_pconnect()进行持久连接

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

但是,有人提出过类似的想法吗

背景
我们在我们的系统中使用移动设备检测。我们面临一些问题,因为我们的生产PHP版本是5.2.6,TeraWurfl使用数据库连接器TeraWurflDatabase_MySQL5.PHP,它使用以下内容:

  • mysqli_connect_error(),在PHP5.2.9之前不受支持(我们使用PHP5.2.6)
  • 在PHP5.3.0之前不支持的持久连接(我们使用PHP5.2.6)
mysqli在php5.3.0之前不完全受支持

所以,我们有两个选择-

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

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

  • 因此,我们决定估算开发包装器类所需的工作量。以下是我们的想法-

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

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


    有人这样做过吗?

    你试过了吗?由于您使用的是PHP5.2和手册“PDO随PHP5.1一起提供,并作为PHP5.0的PECL扩展提供”

    首先,至少要升级到最新的5.2.x版本-它与5.2.6完全兼容,5.2.6已经使用了4年,有4年未修复的bug,包括安全问题

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

    顺便说一句,如果应用此修复程序,OpenX似乎可以与PHP5.3配合使用:
    它不适用于PHP5.4,我严重怀疑它是否会工作,因为开源版本似乎不再被开发

    如果您做了以下更改,可以尝试Zebra_数据库一个轻量级的、成熟的、只有一个文件的OpenX 2.8.10在PHP 5.4中工作:

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

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

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


    有了这些更改,OpenX及其Statistics页面将在PHP5.4中提供,谢谢您的回答。。。对于其他人,这里有一些关于mysql错误的链接,因为使用香草mysql不可能存储过程和多查询-
    function setErrorHandling($mode = null, $options = null) 
    
    public static function setErrorHandling($mode = null, $options = null)
    
    $oPlugin->mergeAds($this->childrendata['ad_id']);
    
    $oPlugin->mergeAds(&$this->childrendata['ad_id']);
    
    $oPlugin->mergeZones($this->childrendata['zone_id']);
    
    $oPlugin->mergeZones(&$this->childrendata['zone_id']);