bonjour!
j'aimerais faire des requetes à un serveur mysql en local. j'ai vu c'était possible mais je n'ai pas trouvé de sites qui expliquaient la démarche à suivre.
pour l'instant j'ai cette erreur :


SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: H?te inconnu.


et voici mon code :


<?php

function load_bd() 
{
    try {
        $db = new PDO('mysql:host=site.fr.mysql:3306;dbname=database_name', 'user', 'password');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $db;
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}


$db = load_bd();

print_r($db);



Modifié par vzytoi (05 Apr 2021 - 11:33)
Salut!

Tu laisses les valeurs par défaut dans ton PDO ici:
 $db = new PDO('mysql:host=site.fr.mysql:3306;dbname=database_name', 'user', 'password');

Il faut que tu crées une base de données avec phpmyadmin ou autre et que tu rentres ces valeurs ensuite à la place des valeurs par défaut.

host serait par exemple "localhost/tonProjet", son répertoire quoi, à la place de "site.fr.mysql:3306"
Alors j'ai regardé dans mes vieux dossiers j'ai trouvé ça.

Tu crées ta bdd et tu prends ton identifiant utilisateur et son mot de passe associé et en gros ça donne ça:


$dsn = 'mysql:dbname=taBDD;host=localhost';
$user = 'tonUser';
$password = 'tonPassword';

$pdo = new PDO($dsn, $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);


Ce qui est en argument dans l'array te permet d'avoir un bel affichage d'erreur en cas de requete SQL mal formée
merci de ta réponse, j'ai fait exprès de remplacer mes information privées par des valeurs plus conventionnelles sinon tu as une solution à mon problème?
Modifié par vzytoi (05 Apr 2021 - 12:25)
Modérateur
Bonjour,

php/pdo ne trouve pas le host sur lequel est la base.

J'ai quelques doutes sur la question. Est-ce que php est installé en local et ton mysql installé sur un serveur distant, ou bien est-ce que tout est installé en local?

Amicalement,
Il faut que tu fasse une requête du genre


// En reprenant mon exemple précédent avec la variable $pdo
$sql = 'SELECT * FROM machin WHERE truc = bidule';

$statement = $pdo->query($sql);

$variable = $statement->fetch(PDO::FETCH_ASSOC);
var_dump($variable);


Dis moi mais normalement ça doit être un truc comme ça!
Hey mais je me rends compte que je suis à côté de la plaque...

Je viens seulement de comprendre ton problème haha Ça va pas à tout le monde le lundi!

Je fais d'autres recherche du coup Smiley biggrin
Sur ta ligne
$db = new PDO('mysql:host=site.fr.mysql:3306;dbname=database_name', 'user', 'password');


"dbname" et "host" sont inversés, tu as essayé dans l'autre sens?
parsimonhi a écrit :
Bonjour,

php/pdo ne trouve pas le host sur lequel est la base.

J'ai quelques doutes sur la question. Est-ce que php est installé en local et ton mysql installé sur un serveur distant, ou bien est-ce que tout est installé en local?

Amicalement,


mysql est sur un serveur distant et php est en locale
Stoneteckel a écrit :
Sur ta ligne
$db = new PDO('mysql:host=site.fr.mysql:3306;dbname=database_name', 'user', 'password');


"dbname" et "host" sont inversés, tu as essayé dans l'autre sens?


apparemment ça ne change rien
Modérateur
Bonjour,

Comme la base est sur un serveur distant, il faut s'assurer que le serveur distant autorise bien les connexions distantes (toujours se souvenir que les administrateurs ont plus d'un tour dans leur sac).

3306 étant le port par défaut de mysql, c'est inutile de le préciser. Par contre, il faudrait vérifier que le port est bien 3306. Et si ce n'est pas 3306, il faudra alors préciser le port.

Enfin, il faut vérifier que c'est le bon nom qui est utilisé pour le host dans l'instruction new PDO(...). Mais bon, ça, il n'y a que toi qui peut le savoir.

EDIT: il faut aussi vérifier que ton utilisateur a bien le droit de se connecter à distance.

Amicalement,
Modifié par parsimonhi (05 Apr 2021 - 14:26)
parsimonhi a écrit :
Bonjour,

Comme la base est sur un serveur distant, il faut s'assurer que le serveur distant autorise bien les connexions distantes (toujours se souvenir que les administrateurs ont plus d'un tour dans leur sac).

3306 étant le port par défaut de mysql, c'est inutile de le préciser. Par contre, il faudrait vérifier que le port est bien 3306. Et si ce n'est pas 3306, il faudra alors préciser le port.

Enfin, il faut vérifier que c'est le bon nom qui est utilisé pour le host dans l'instruction new PDO(...). Mais bon, ça, il n'y a que toi qui peut le savoir.

EDIT: il faut aussi vérifier que ton utilisateur a bien le droit de se connecter à distance.

Amicalement,


merci beaucoup de tes éclaircissements, comment est-ce que je pourrais activer les connexions distantes, avec phpmyadmin?
Modérateur
Bonjour,

vzytoi a écrit :
merci beaucoup de tes éclaircissements, comment est-ce que je pourrais activer les connexions distantes, avec phpmyadmin?


Ne connaissant pas ton contexte, je ne peux pas répondre avec exactitude à cette question.

Pour l'accès distant au serveur, ça peut être limité par l'hébergeur, auquel cas il y a peu de chance que tu puisses toi-même décider d'activer ça. Il y a par contre de bonnes chances que tout ça soit précisé dans ton panneau d'administration de ton site chez ton hébergeur.

Pour l'accès à distance de l'utilisateur, ça peut être activé via phpmyadmin, mais il faut que tu puisses avoir accès à cette partie de phpmyadmin ce qui n'est pas toujours le cas selon l'utilisateur dont tu disposes pour te connecter à phpmyadmin (c'est dans l'onglet "user accounts" ou son équivalent en français). Si tu ne vois pas cet onglet, c'est que tu ne peux pas configurer ça avec l'utilisateur avec lequel tu te connectes à phpmyadmin.

Ceci étant, le message que tu as indique plutôt une erreur dans le nom du serveur me semble-t-il. La connexion à distance, ça devrait générer une autre erreur du genre "Connection refused" (je ne sais pas si c'est chez tout le monde pareil), erreur que tu auras peut-être Smiley smile quand php/pdo trouvera enfin ton serveur mysql. Eventuellement, essaie avec l'adresse ip de ton serveur au lieu de son nom.

Amicalement,
merci de ta réponse, j'ai les droits administrateur sur le serveur (c'est le mien) et je n'ai tout de même pas l'onglet : https://zupimages.net/viewer.php?id=21/14/xqz6.png
pour ce qui est de la connexion avec l'adresse ip, ça n'a rien changé, mais dans mon panneau de configuration de mon hébergeur il est bien indiqué l'hôte comme je n'ai écrit dans mon code (sans le port que j'ai retiré)
Modérateur
Bonjour,

vzytoi a écrit :
merci de ta réponse, j'ai les droits administrateur sur le serveur (c'est le mien) et je n'ai tout de même pas l'onglet : https://zupimages.net/viewer.php?id=21/14/xqz6.png


Ça dépend de l'utilisateur mysql que tu as utilisé. Connecte-toi à phpmyadmin avec l'utilisateur root de mysql si tu le peux.

vzytoi a écrit :
pour ce qui est de la connexion avec l'adresse ip, ça n'a rien changé, mais dans mon panneau de configuration de mon hébergeur il est bien indiqué l'hôte comme je n'ai écrit dans mon code (sans le port que j'ai retiré)


Si ton serveur est un linux, et comme tu as les droits d'administrateur, le lien ci-dessous pourrait te donner des pistes :

https://technique.arscenic.org/lamp-linux-apache-mysql-php/mysql-le-serveur-de-bases-de-donnees/article/acces-distant-a-un-serveur-mysql

Amicalement,
Modifié par parsimonhi (05 Apr 2021 - 17:00)