PDO + WAMP + win7 problème de connexion à la base de données

Petit nouveau ! | 1 Messages

19 nov. 2010, 08:15

Bonjour à toutes et à tous.

Je suis plutôt débutant en PHP et mon problème se trouve ici :

J'ai une classe "test" dans laquelle le constructeur sert de connexion à ma base MySql via PDO (c'est juste pour le test).
voici l'extrait du code concerné :
private $dbhost;
private $dbname;
private $dbuser;
private $dbpass;
private $dsn = 'mysql:host=$dbhost;dbname=$dbname';

public function __construct()
{
$this->dbhost = 'localhost';
$this->dbname = 'agence24db';
$this->dbuser = 'root';
$this->dbpass = '';

try {
$dbh = new PDO ($this->dsn,$this->dbuser,$this->dbpass);
}
catch (PDOException $e) {
die ("Erreur ! : ".$e->getMessage ());
}
}
Quand ce code est exécuté, Firefox me retourne systématiquement l'erreur suivante :

Code : Tout sélectionner

Warning: PDO::__construct() [pdo.--construct]: php_network_getaddresses: getaddrinfo failed: H�te inconnu. in C:\wamp\www\createlist_copy.class.php on line 27 Warning: PDO::__construct() [pdo.--construct]: [2002] php_network_getaddresses: getaddrinfo failed: H�te inconnu. (trying to connect via tcp://$dbhost:3306) in C:\wamp\www\createlist_copy.class.php on line 27 Erreur ! : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: H�te inconnu.
La ligne 27 est celle-ci :
$dbh = new PDO ($this->dsn,$this->dbuser,$this->dbpass);
Voila, je suis bloqué là-dessus et donc impossible de tester la validité du reste de ma classe...

Est-ce que quelqu'un est déjà tombé sur ce même message d'erreur ??
J'ai été voir un post sur le forum de wamp mais il n'a pas été résolu.

Toute aide sera la bienvenue, merci d'avance

ViPHP
ViPHP | 2577 Messages

19 nov. 2010, 09:40

Bonjour,

J'ai un doute sur : private $dsn = 'mysql:host=$dbhost;dbname=$dbname';

Je ne connais pas PDO, mais les ' font que les variables ne sont pas interprétées.
Tu devrais essayer $this->dsn = "mysql:host=$this->dbhost;dbname=$this->dbname" dans __construct
ou $this->dsn = 'mysql:host='.$this->dbhost.';dbname='.$this->dbname

Au minimum, affiche le contenu de dsn.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 nov. 2010, 09:41

salut,

c'est normal tu initialise la propriété dns avec 'mysql:host=$dbhost;dbname=$dbname';

ceci est la chaine que tu envoi directement à PDO et qu'il va utiliser pour se connecter à Mysql.
le résultat est explicite
(trying to connect via tcp://$dbhost:3306) in C:\wamp\www\createlist_copy.class.php on line 27
Erreur ! : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: H�te inconnu.
PDO chercher à se connecter à un serveur mysql qui se nomme $dbhost sur le port 3306.
Attention c'est bien la chaine de caractère $dbhost qu'il cherche et non le contenue de cette variable.
tu ne peut pas initialiser la propriété $dns ainsi.

tu peut facilement le construire dans le constructeur comme pour le reste
<?php
private $dsn;

public function __construct()
{
$this->dbhost = 'localhost';
$this->dbname = 'agence24db';
$this->dbuser = 'root';
$this->dbpass = '';
$this->dns = 'mysql:host='.$this->dbhost.';dbname='.$this->dbname;
?>
Pour finir regarde la différence entre des simple quote (') et les doubles quote (") pour les chaines de caractère (interprétation ou non des variables dans une chaine) et l'utilisation des méthodes et propriétés d'une classe ($dhost n'existe pas).

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 1 Messages

03 févr. 2013, 15:32

Salut,

je ne suis pas sûr, mais si j'ai bien compris le dsn est seulement l'adresse de la machine où se trouve la base et pas le nom de la base. Donc dans ton cas, le dsn est "mysql:host=$dbhost" et pas "mysql:host=$dbhost;dbname=$dbname".

ensuite, pour l'erreur d'encodage dans "Erreur ! : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: H�te inconnu." tu peux utiliser la fonction utf8_encode comme ceci :
<?php

	try
	{
		$bdd = new PDO('mysql:host=locdalhost;dbname=test', 'root', '');
	}
	catch (PDOException $e)
	{
		die(utf8_encode('Erreur : ' . $e->getMessage()));
	}

?>

Eléphant du PHP | 120 Messages

03 févr. 2013, 15:38

Félications, tu viens de déterrer un sujet qui a plus de deux ans.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

03 févr. 2013, 16:12

et d'indiquer une anerie ;)
Donc dans ton cas, le dsn est "mysql:host=$dbhost" et pas "mysql:host=$dbhost;dbname=$dbname".
si si il faut indiquer le nom de la base, le nom du serveur ne suffit pas (on va pas non plus envoyer de use lenomdelabase à tous va ;) ).


pour info http://fr2.php.net/manual/fr/ref.pdo-my ... ection.php


@+
Il en faut peu pour être heureux ......