J'ai 2 bases de données. Quand j'inclus la connexion à la base de données (with a include('filename.php');
), wordpress agit vraiment de manière étrange.
Je ne parviens pas à me connecter, le nom d'utilisateur et le mot de passe wordpress sont corrects, mais le système essaie de se connecter à l'autre base de données (ce que je peux voir lorsque j'active le débogage).
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
C'est comme s'ils ne pouvaient pas séparer les connexions. Tout ce qui peut m'aider dans la bonne direction?
Le contenu cesse également de fonctionner.
Edit: Clearifying
Ma connexion à la base de données:
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);
}
}
Donc, si j'interroge quelque chose de nouveau, j'aime bien ceci: ir_mysql()->query("SELECT....");
Ma méthode et ma méthode wordpress ne fonctionnent pas bien.
Au cas où quelqu'un serait intéressé. Je l'ai fait fonctionner.
J'ai créé un plugin et dans le fichier php principal, j'ai écrit ceci.
<?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();
?>
La ir_load()
contient la connexion de la base de données à ma base de données. J'en ai fait une fonction au cas où je devrais la modifier ou l'inclure ailleurs.
db_fix_login devait aller à wp_head()
(puisque j'utilise get_header()
sur ma sous-page pour conserver la fonctionnalité wordpress).
Tout fonctionnait sauf que je me déconnectais tout le temps si je ne faisais que ir_load()
.
Donc, après avoir tout essayé: pourquoi ne pas lancer db_fix_login()
juste après? Ça a marché. Aucune erreur ou quoi que ce soit!