web-dev-qa-db-ja.com

Wordpressは間違ったデータベースを選びます

私は2つのデータベースを持っています。データベース接続(with a include('filename.php');)を含めると、wordpressの動作が本当におかしくなります。

ログインできません。ワードプレスのユーザー名とパスワードは正しいですが、他のデータベースに接続しようとします(デバッグをオンにすると表示されます)。

WordPress database error: [Table 'api.apiwp_options' doesn't exist]
SELECT option_value FROM apiwp_options WHERE option_name = 'widget_pages' LIMIT 1
WordPress database error: [Table 'api.apiwp_options' doesn't exist]
SELECT option_value FROM apiwp_options WHERE option_name = 'widget_calendar' LIMIT 1
WordPress database error: [Table 'api.apiwp_options' doesn't exist]
SELECT option_value FROM apiwp_options WHERE option_name = 'widget_links' LIMIT 1
WordPress database error: [Table 'api.apiwp_options' doesn't exist]
SELECT option_value FROM apiwp_options WHERE option_name = 'widget_tag_cloud' LIMIT 1
WordPress database error: [Table 'api.apiwp_options' doesn't exist]
SELECT option_value FROM apiwp_options WHERE option_name = 'widget_nav_menu' LIMIT 1

それは彼らが接続を分離できないようなものです。正しい方向に私を助けることができる何か?

コンテンツも機能しなくなります。

編集:消去

私のデータベース接続:

function ir_mysql() {
    global $dbm;

    if(empty($dbm)){
        $dbm = new Mysql(DBHOST, DBUSER, DBPASS, DBNAME);
    }
    return $dbm;
}

mysql.class.php

class Mysql {

    // Variabler 
    // -----------------------------
    private $db;
    private $user;
    private $password;
    private $Host;
    private $linkid;
    private $result;

function __construct($Host, $user, $password, $db) {
        try {
            $this->db = $db;
            $this->user = $user;
            $this->password = $password;
            $this->Host = $Host;

            $this->connect();
            $this->select();
            mysql_set_charset('utf8', $this->linkid);
        } catch (exception $e) {
            die($e->getMessage());
        }
    }


    function Connect() {
        try {
            $this->linkid = mysql_connect($this->Host, $this->user, $this->password);
            if (!$this->linkid) {
                throw new Exception(mysql_error());
            }
        } catch (Exception $e) {
            die($e->getMessage());
        }
    }


    function Select() {
        try {
            if (!mysql_select_db($this->db, $this->linkid)) {
                throw new Exception("Cannot access the selected database");
            }
        } catch (Exception $e) {
            die($e->getMessage());
        }
    }


    function Query($sql) {
        try {
            $this->result = @mysql_query($sql, $this->linkid);

            if (!$this->result) {

                throw new Exception("Mysql query error: \n <br />" . mysql_error() . "<br />" . mysql_errno());
            }
        } catch (Exception $e) {
            if (ir_admin()) {
                die($e->getMessage());
            }
        }

        return $this->result;
    }

function Close() {
        mysql_close($this->linkid);
}

}

だから、私が何か新しいことを問い合わせているのなら、私はこのようにする:ir_mysql()->query("SELECT....");

私の方法とワードプレスの方法はうまく機能していません。

1
jocken

誰かが興味を持った場合。私はそれを機能させました。

私はプラグインを作り、メインのphpファイルにこれを書きました。

<?php

function ir_load(){
    include_once(ABSPATH . 'load.php');
}

function db_fix_login(){
    global $wpdb;
    $wpdb->select(DB_NAME);
}

add_action("wp_head","db_fix_login", 0);

ir_load();
db_fix_login();

?>

ir_load()は私のデータベースへのデータベース接続を含みます。他の場所に変更または追加する必要がある場合に備えて、これを機能にしました。

db_fix_loginはwp_head()にアクセスする必要がありました(私はワードプレス機能を維持するためにサブページでget_header()を使用しているため)。

ir_load()を実行しただけでログアウトした以外はすべてうまくいきました。

それで、すべてを試した後:どうしてdb_fix_login()を実行しないのですか?出来た。エラーやなんでもない!

1
jocken