php5项目迁移php7 mysql兼容性问题解决方案

文章介绍了如何在PHP7不支持MySQL扩展的情况下,通过mysqli_connect等函数模拟旧程序中的MySQL功能,以保持兼容性。
摘要由CSDN通过智能技术生成

测试可用

直接存储为php7.php引用即可

<?php
/**
 * php7 不支持mysql扩展的情况下,旧程序运行在PHP7环境下,直接通过公用文件包含此mysql扩展相关的函数包即可。
 如果旧程序不想使用mysql扩展,但想使用mysql扩展的相同的函数,也可以使用此文件。
 */
if (!function_exists('mysql_connect')) {
    function_exists('mysqli_connect') or die("要在没有mysql扩展的PHP中使用mysql相关函数,请先开启mysqli扩展!");

    function mysql_connect($server,  $username,  $password, $new_link = false, $client_flags = 0)
    {
        $port = '3306';
        if (strpos($server, ':') !== false) {
            $host_port = explode(':', $server);
            $port = $host_port[1];
        }
        $link = mysqli_connect($server, $username, $password, '', $port);

        //mysqli不像mysql扩展那样在全局维护连接对象(mysql操作函数省略连接参数进行查询时会自动从全局作用域获取连接),所以这里手动添加一个到全局。
        if(!mysqli_connect_errno()){
            $GLOBALS['link_identifier'] = $link;
            return $link;
        }

        return false;
    }

    function link_identifier_of(&$link_identifier = null)
    {
        if (is_null($link_identifier)) {
            $link_identifier = !empty($GLOBALS['link_identifier']) ? $GLOBALS['link_identifier'] : null;
        }
    }

    function mysql_error($link_identifier = null)
    {
        if(empty($GLOBALS['link_identifier'])){
            return mysqli_connect_error();
        }

        link_identifier_of($link_identifier);
        return mysqli_error($link_identifier);
    }

    function mysql_errno($link_identifier = null)
    {

        if(empty($GLOBALS['link_identifier'])){
            return mysqli_connect_errno();
        }

        link_identifier_of($link_identifier);
        return mysqli_errno($link_identifier);
    }



    function mysql_selectdb($database_name, $link_identifier=null)
    {
        return mysql_select_db($database_name, $link_identifier);
    }

    function mysql_select_db($database_name, $link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_select_db($link_identifier, $database_name);
    }

    function mysql_query($query, $link_identifier = null)
    {
        link_identifier_of($link_identifier);
        $resultmode = MYSQLI_STORE_RESULT;
        return mysqli_query($link_identifier, $query, $resultmode);
    }

    defined('MYSQL_BOTH') or define('MYSQL_BOTH', MYSQLI_BOTH);
    defined('MYSQL_ASSOC') or define('MYSQL_ASSOC', MYSQLI_ASSOC);
    defined('MYSQL_NUM') or define('MYSQL_NUM', MYSQLI_NUM);

    function mysql_fetch_array($result, $result_type = MYSQL_BOTH)
    {
        return is_object($result) ? mysqli_fetch_array($result, $result_type) : array();
    }

    function mysql_fetch_assoc($result)
    {
        return mysql_fetch_array($result, MYSQL_ASSOC);
    }

    function mysql_fetch_row($result)
    {
        return mysql_fetch_array($result, MYSQL_NUM);
    }

    function mysql_fetch_object($result, $class_name = 'stdClass', $params = null)
    {
        if (!$params) {
            $params = array();
        }

        return mysqli_fetch_object($result, $class_name, $params);
    }

    function mysql_fetch_lengths($result)
    {
        return mysqli_fetch_lengths($result);
    }

    function mysql_fetch_field($result, $field_offset = null)
    {
        // fix
        if(!isset($field_offset)){
            return mysqli_fetch_field($result);
        }

        return mysqli_fetch_field_direct($result, intval($field_offset));
    }

    function mysql_field_name($result, $field_offset = 0)
    {

        if (is_object($result)) {
            $mysql_field = mysql_fetch_field($result, $field_offset);
            if (is_object($mysql_field)) {
                return $mysql_field->name;
            }
        }

        if (is_array($result)) {
            return $result["$field_offset"];
        }

        return null;
    }

    function mysql_field_len($result, $field_offset = 0)
    {
        $mysql_field = mysql_fetch_field($result, $field_offset);
        if (is_object($mysql_field)) {
            return $mysql_field->length;
        }
        return null;

    }


    function mysql_field_table($result, $field_offset = 0)
    {
        $mysql_field = mysql_fetch_field($result, $field_offset);
        if (is_object($mysql_field)) {
            return $mysql_field->table;
        }
        return null;
    }


    function mysql_field_type($result, $field_offset = 0)
    {
        $mysql_field = mysql_fetch_field($result, $field_offset);
        if (is_object($mysql_field)) {
            $type =  $mysql_field->type;

            switch ($type) {
                case MYSQLI_TYPE_VAR_STRING:
                case  MYSQLI_TYPE_STRING:
                    $type = 'string';
                    break;
                case MYSQLI_TYPE_LONG:
                case MYSQLI_TYPE_SHORT:
                case MYSQLI_TYPE_TINY:
                case MYSQLI_TYPE_LONGLONG:
                    $type = 'int';
                    break;
                case MYSQLI_TYPE_BLOB:
                case MYSQLI_TYPE_LONG_BLOB:
                case MYSQLI_TYPE_MEDIUM_BLOB:
                case MYSQLI_TYPE_TINY_BLOB:
                    $type = 'blob';
                    break;
                case MYSQLI_TYPE_CHAR:
                    $type = 'char';
                    break;
                default:
                    $type = 'string';
                    break;
            }
            return $type;
        }
        return null;
    }

    function mysql_field_flags($result, $field_offset)
    {
        $mysql_field = mysql_fetch_field($result, $field_offset);
        if (is_object($mysql_field)) {
            //return $mysql_field->flags;
        }
        return null;
    }

    function mysql_field_seek($result, $field_offset)
    {
        $mysql_field = mysql_fetch_field($result, $field_offset);
        if (is_object($mysql_field)) {
            //return $mysql_field->se;
        }
        return null;
    }

    function mysql_free_result($result)
    {
        $flag = true;
        try {
            mysqli_free_result($result);
        } catch (\Exception $e) {
            $flag = false;
        }

        return $flag;
    }


    function mysql_close($link_identifier = null)
    {
        link_identifier_of($link_identifier);

        if(!empty($GLOBALS['link_identifier'])){
            unset($GLOBALS['link_identifier']);
        }
        return mysqli_close($link_identifier);
    }

    function mysql_pconnect($server, $username, $password, $client_flags = null)
    {
        return mysql_connect($server, $username, $password, true, 0);
    }

    function mysql_stat($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_stat($link_identifier);
    }

    function mysql_affected_rows($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_affected_rows($link_identifier);
    }

    function mysql_client_encoding($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_client_encoding($link_identifier);
    }

    function mysql_create_db($database_name, $link_identifier)
    {
        link_identifier_of($link_identifier);
        $query = "create database `$database_name`  default character set = 'utf8' ";
        $resultmode = MYSQLI_STORE_RESULT;
        return mysqli_query($link_identifier, $query, $resultmode);
    }

    function mysql_data_seek($result,  $row_number)
    {
        return mysqli_data_seek($result, $row_number);
    }


    function mysql_db_name($result, $row, $field = null)
    {
        if (is_array($result)) {
            return $result["$row"];
        }
        mysql_data_seek($result, $row);
        $row = mysql_fetch_row($result);
        $dbname = $row[0];
        return $dbname;
    }

    function mysql_db_query($database, $query, $link_identifier = null)
    {
        link_identifier_of($link_identifier);
        mysqli_select_db($link_identifier,$database);
        mysqli_query($link_identifier,$query);
    }

    function mysql_drop_db($database_name, $link_identifier)
    {
        link_identifier_of($link_identifier);
        $result = mysqli_query($link_identifier, "drop `$database_name`");

        return $result;
    }

    function mysql_escape_string($unescaped_string, $link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_escape_string($link_identifier, $unescaped_string);
    }


    function mysql_real_escape_string($unescaped_string, $link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_real_escape_string($link_identifier, $unescaped_string);
    }

    function mysql_get_client_info()
    {
        return mysqli_get_client_info();
    }
    function mysql_get_host_info($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_get_host_info($link_identifier);
    }

    function mysql_get_proto_info($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_get_proto_info($link_identifier);
    }

    function mysql_get_server_info($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_get_server_info($link_identifier);
    }

    function mysql_info($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_info($link_identifier);
    }

    function mysql_insert_id($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return  mysqli_insert_id($link_identifier);
    }

    function mysql_list_dbs($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_query($link_identifier, 'show databases');
    }

    function mysql_list_fields($database_name, $table_name, $link_identifier = null)
    {
        link_identifier_of($link_identifier);
        $result = mysqli_query($link_identifier, "DESCRIBE `$database_name`.`$table_name`");
        $column = array();
        while ($arr = mysqli_fetch_assoc($result)) {
            $column[] = $arr['Field'];
        }

        return $column;
    }

    function mysql_num_fields($result)
    {
        if ($result instanceof object) {
            return mysqli_num_fields($result);
        }

        if (is_array($result)) {
            return count($result);
        }

        return 0;
    }

    function mysql_list_processes($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        $result = mysqli_query($link_identifier, "show processlist");
        return $result;
    }

    function mysql_list_tables($database, $link_identifier = null)
    {
        link_identifier_of($link_identifier);
        mysqli_query($link_identifier, "use `$database`");
        $result = mysqli_query($link_identifier, "show tables");
        return $result;
    }


    function mysql_num_rows($result)
    {
        if (is_array($result)) {
            return count($result);
        }

        return mysqli_num_rows($result);
    }

    function mysql_ping($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_ping($link_identifier);
    }

    function mysql_result($result, $row = 0, $field = 0)
    {
        mysql_data_seek($result, $row);
        $arr = mysql_fetch_array($result);
        $column_result = $arr["$field"];
        if ($row != 0) {
            mysql_data_seek($result, 0);
        }

        return $column_result;
    }

    function mysql_set_charset($charset, $link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_set_charset($link_identifier, $charset);
    }

    function mysql_tablename($result, $i=0)
    {
        if (is_array($result)) {
            return $result["$i"];
        }

        mysql_data_seek($result, $i);
        $row = mysql_fetch_row($result);
        $tablename = $row[0];

        return $tablename;
    }

    function mysql_thread_id($link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_thread_id($link_identifier);
    }

    function mysql_unbuffered_query($query, $link_identifier = null)
    {
        link_identifier_of($link_identifier);
        return mysqli_query($link_identifier, $query);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值