[RESOLU] Connexion à une deuxième base de données sous Wordpress

Eléphanteau du PHP | 10 Messages

02 oct. 2023, 11:49

Bonjour,

Dans le fichier config.php de mon site, les infos de connexion à la base de données principale sont renseignées et le site fonctionne. Cependant quand j'essaie d'établir une connexion à une autre bdd située sur le même hébergement, je rencontre beaucoup de problèmes.

Sur une page donnée, un short code est censé exécuter une fonction de connexion à la 2eme bdd.

Quand j'utilise PDO ou Mysqli pour le faire, j'ai cette erreur :

Code : Tout sélectionner

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

Quand j'utilise la classe wpdb de wordpress, c'est pareil, beaucoup de problèmes. J'ai essayé plein de choses différentes mais je vais vous partager le code qui plante le moins. Avec celui là, la page s'affiche mais la connexion à la base de données ne semble pas établie car toute opération faite sur elle retourne null.

Code php de mon fichier chargé par le short code :

Code : Tout sélectionner

// Inclure le fichier de fonctions et établir la connexion à la base de données include 'ErpClass_functions.php'; $connexion = connectToDatabase(); // Récupérer les données des types et sous-types ERP depuis la base de données $typeERPData = getAllFromTypeERP($connexion); $sousTypeERPData = getAllFromSousTypeERP($connexion);

Fonctions php utilisées :

Code : Tout sélectionner

//Retourne une connexion vers la base de données function connectToDatabase() { // Bdd en ligne $servername = "nomBdd.mysql.db"; $username = "nomBdd"; $password = "mdpBdd"; $dbname = "nomBdd"; $conn = new wpdb($username,$password,$dbname,$servername); $conn->set_prefix(''); //Avec ou sans cette ligne on a le même résultat return $conn; } //Prend une connexion en argument //Retourne un tableau contenant tous les tuples de la table type_ERP function getAllFromTypeERP($connexion) { $result = $connexion->get_results("SELECT * FROM type_erp"); return $result; } //Prend une connexion en argument //Retourne un tableau contenant tous les tuples de la table sous_type_ERP function getAllFromSousTypeERP($connexion) { $result = $connexion->get_results("SELECT * FROM sous_type_erp"); return $result; }

Pour terminer je précise :
- J'ai déjà vérifié une dizaine de fois si les informations de connexion étaient bonnes.
- La base de données à laquelle je veux me connecter n'est accessible que depuis le serveur où elle est hébergée. C'est le cas de mon site, il se connecte sans problème à la bdd principale dans config.php. Cependant il est peut être possible que l'emplacement de mon code ( dans le dossier du thème enfant utilisé par le site ) l'empêche de se connecter à la deuxième. Dans ce dernier cas je ne sais pas non plus quoi faire.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9626 Messages

03 oct. 2023, 10:05

Bonjours,

As-tu contacté ton hébergeur ?
Car peut être a-t-il mis en place des restrictions...
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

04 oct. 2023, 09:24

Bonjours,

As-tu contacté ton hébergeur ?
Car peut être a-t-il mis en place des restrictions...
Bonjour,

Mon hébergeur m'assure que la base de données est fonctionnel et accessible. En leur décrivant un peu le problème ils m'ont aussi dit que ça dépassait complètement leur champ de compétences.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9626 Messages

04 oct. 2023, 09:47

C'est à ton hébergeur de te donner les informations de connexion à ta 2ème base de données et notamment ce que tu dois renseigner comme nom de serveur.

Si ça dépasse leurs compétences, soit ils n'ont pas compris ta question, soit tu n'es pas tombé sur le bon interlocuteur, soit il faut que tu changes rapidement d'hébergeur :-D
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

04 oct. 2023, 12:02

C'est à ton hébergeur de te donner les informations de connexion à ta 2ème base de données et notamment ce que tu dois renseigner comme nom de serveur.

Si ça dépasse leurs compétences, soit ils n'ont pas compris ta question, soit tu n'es pas tombé sur le bon interlocuteur, soit il faut que tu changes rapidement d'hébergeur :-D
Il peut bien y avoir une erreur autre part que dans les identifiants non ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9626 Messages

04 oct. 2023, 12:37

Vu le message d'erreur, c'est un problème :
- soit de mauvaise info de serveur MySQL (que tu as renseigné dans $servername),
- soit de mauvaise configuration système/réseau du serveur (sur lequel tu n'as pas la main, si tu es sur un serveur mutualisé ou virtuel)
Donc dans les 2 cas, il n'y a que ton hébergeur qui devrait pouvoir t'aider.


Si tu veux en être sûr, crée une page PHP avec uniquement le code suivant :
<?php
$servername = "nomBdd.mysql.db";
$username = "nomBdd";
$password = "mdpBdd";
$dbname = "nomBdd";

$dsn = 'mysql:dbname='.$dbname.';host='.$servername;
$dbh = new PDO($dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));

$dbh->query("SHOW TABLES");
Si tu as le même message d'erreur, c'est à ton hébergeur de faire le nécessaire car ce code est directement celui de la documentation PHP : https://www.php.net/manual/fr/pdo.error-handling.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

09 oct. 2023, 09:47

Vu le message d'erreur, c'est un problème :
- soit de mauvaise info de serveur MySQL (que tu as renseigné dans $servername),
- soit de mauvaise configuration système/réseau du serveur (sur lequel tu n'as pas la main, si tu es sur un serveur mutualisé ou virtuel)
Donc dans les 2 cas, il n'y a que ton hébergeur qui devrait pouvoir t'aider.


Si tu veux en être sûr, crée une page PHP avec uniquement le code suivant :
<?php
$servername = "nomBdd.mysql.db";
$username = "nomBdd";
$password = "mdpBdd";
$dbname = "nomBdd";

$dsn = 'mysql:dbname='.$dbname.';host='.$servername;
$dbh = new PDO($dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));

$dbh->query("SHOW TABLES");
Si tu as le même message d'erreur, c'est à ton hébergeur de faire le nécessaire car ce code est directement celui de la documentation PHP : https://www.php.net/manual/fr/pdo.error-handling.php
Avec ce code, Wordpress m'affiche un message : "Erreur critique sur le site" et n'affiche rien dans la console.

Je pense que le problème est du à la façon dont Wordpress peut ou non se connecter à une bdd.
C'est ici que j'ai lu que je pouvais utiliser wpdb pour me connecter à la base, mais comme je le disais mon code ne semble pas établir de connexion :
https://wordpress.stackexchange.com/que ... /1618#1618

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9626 Messages

09 oct. 2023, 09:59

"crée une page PHP avec uniquement le code suivant" => donc un nouveau script PHP, sans passer par Wordpress ;-)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

11 oct. 2023, 11:03

Bon, il se trouve que le site n'était pas du tout hébergé où je le pensais. Le serveur qui stockait mes bases de données était l'hébergeur de l'ancien site qui partageait encore le même nom de domaine. Je clos alors le sujet, merci de ton aide @rthur.