NilDigit โพสต์ 2015-11-1 19:20:08

การทำให้ Discuz! X ใช้งานร่วมกับ MariaDB

MariaDB เป็นระบบฐานข้อมูลที่แยกพัฒนาออกจาก MySQL ของ Oracle นะครับ รู้สึกว่าหลังๆจะได้รับความนิยมมากขึ้นพอสมควร อาจจะมีการเปลื่ยนแปลงครั้งใหญ่ในอนาคตก็ได้ จะลองก่อน ก็ไม่เสียหาย จริงไหมครับ?

สำหรับ Discuz! X ยังไม่รองรับ MariaDB จำเป็นต้องโมไฟล์นิดหน่อยเพื่อให้ใช้งานได้ครับ ทำตามนี้เลย

ที่ไฟล์ source\class\db\db_driver_mysql.php หา

function _dbconnect($dbhost, $dbuser, $dbpw, $dbcharset, $dbname, $pconnect, $halt = true) {

                if($pconnect) {
                        $link = @mysql_pconnect($dbhost, $dbuser, $dbpw, MYSQL_CLIENT_COMPRESS);
                } else {
                        $link = @mysql_connect($dbhost, $dbuser, $dbpw, 1, MYSQL_CLIENT_COMPRESS);
                }
                if(!$link) {
                        $halt && $this->halt('notconnect', $this->errno());
                } else {
                        $this->curlink = $link;
                        if($this->version() > '4.1') {
                                $dbcharset = $dbcharset ? $dbcharset : $this->config['dbcharset'];
                                $serverset = $dbcharset ? 'character_set_connection='.$dbcharset.', character_set_results='.$dbcharset.', character_set_client=binary' : '';
                                $serverset .= $this->version() > '5.0.1' ? ((empty($serverset) ? '' : ',').'sql_mode=\'\'') : '';
                                $serverset && mysql_query("SET $serverset", $link);
                        }
                        $dbname && @mysql_select_db($dbname, $link);
                }
                return $link;
        }

แก้เป็น

function _dbconnect($dbhost, $dbuser, $dbpw, $dbcharset, $dbname, $pconnect, $halt = true) {

if($pconnect) {
    $link = @mysql_pconnect($dbhost, $dbuser, $dbpw, MYSQL_CLIENT_COMPRESS);
} else {
    $link = @mysql_connect($dbhost, $dbuser, $dbpw, 1, MYSQL_CLIENT_COMPRESS);
}
if(!$link) {
    $halt && $this->halt('notconnect', $this->errno());
} else {
    $this->curlink = $link;
    if(version_compare($this->version(), '4.1', '>')) {
      $dbcharset = $dbcharset ? $dbcharset : $this->config['dbcharset'];
      $serverset = $dbcharset ? 'character_set_connection='.$dbcharset.', character_set_results='.$dbcharset.', character_set_client=binary' : '';
      $serverset .= version_compare($this->version(), '5.0.1', '>') ? ((empty($serverset) ? '' : ',').'sql_mode=\'\'') : '';
      $serverset && mysql_query("SET $serverset", $link);
    }
    $dbname && @mysql_select_db($dbname, $link);
}
return $link;
}

ต่อไปที่ source\class\db\db_driver_mysqli.php หา

function _dbconnect($dbhost, $dbuser, $dbpw, $dbcharset, $dbname, $pconnect, $halt = true) {

                $link = new mysqli();
                if(!$link->real_connect($dbhost, $dbuser, $dbpw, $dbname, null, null, MYSQLI_CLIENT_COMPRESS)) {
                        $halt && $this->halt('notconnect', $this->errno());
                } else {
                        $this->curlink = $link;
                        if($this->version() > '4.1') {
                                $link->set_charset($dbcharset ? $dbcharset : $this->config['dbcharset']);
                                $serverset = $this->version() > '5.0.1' ? 'sql_mode=\'\'' : '';
                                $serverset && $link->query("SET $serverset");
                        }
                }
                return $link;
        }

แก้เป็น

function _dbconnect($dbhost, $dbuser, $dbpw, $dbcharset, $dbname, $pconnect, $halt = true) {

$link = new mysqli();
if(!$link->real_connect($dbhost, $dbuser, $dbpw, $dbname, null, null, MYSQLI_CLIENT_COMPRESS)) {
    $halt && $this->halt('notconnect', $this->errno());
} else {
    $this->curlink = $link;
    if(version_compare($this->version(), '4.1', '>')) {
      $link->set_charset($dbcharset ? $dbcharset : $this->config['dbcharset']);
      $serverset = version_compare($this->version(), '5.0.1', '>') ? 'sql_mode=\'\'' : '';
      $serverset && $link->query("SET $serverset");
    }
}
return $link;
}

เพียงเท่านี้ก็สามารถใช้งาน MariaDB ได้แล้วครับ

LagSeeN โพสต์ 2016-6-26 14:35:25

ขอบคุณครับ เดียวจะไปลองดู

LagSeeN โพสต์ 2016-6-27 09:30:23

ลองแล้วครับไม่ผ่านเช่นเดิม
http://www.mx7.com/i/dea/Tq7Iuk.PNG

9tum โพสต์ 2019-2-4 18:02:47

https://gitee.com/ComsenzDiscuz/DiscuzX/issues/IJFC7


安装disucz报错,TK求助CP主机回复 不支持MARIADB数据库
百度找到下面解决方案
求指点

查找搜function version()函数,让函数直接return '9.9.9',包含的文件有
source\class\db\db_driver_mysql.php
source\class\db\db_driver_mysqli.php
uc_client\lib\db.class.php
uc_server\lib\db.class.php
api\db\dbbak.php

上面
找到source\class\db\db_driver_mysql.php

    function version() {
            if(empty($this->version)) {
                  $this->version = mysql_get_server_info($this->curlink);
            }
            return $this->version;
    }
怎么注释 高手指点下~

=== 刚刚找到了几个解决方法 ===

    function version() {
            if(empty($this->version)) {
                  $this->version = mysql_get_server_info($this->curlink);
            }
            return '9.9.9';
    }
=======================

function version() {
if(empty(this−>version))$this−>version=′9.9.9′;returnthis->version;
}

=======================

function version() {
            return '9.9.9';
    }


/// ขอบคุณ ข้อมูล จากhost4pro
หน้า: [1]
ดูในรูปแบบกติ: การทำให้ Discuz! X ใช้งานร่วมกับ MariaDB