Connexion BDD en dehors environnement de test

Invité
Invité n'ayant pas de compte PHPfrance

14 oct. 2010, 17:00

Bonjour tout le monde.

J'ai un problème assez emmerdant, c'est qu'apparemment je n'arrive pas à me connecter à la BDD. Je m'explique. J'ai développé sous mon Linux, Fedora 12, PHP 5.3, un module qui marche très bien. Mais, en testant sur un autre serveur, et que ce soit un linux (testé sous Debian Lenny), un windows (XP), avec FF ou IE, wamp ou simplement PHP et apache "bruts", j'ai toujours la même erreur qui revient. Celle-ci :

Code : Tout sélectionner

exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)' in C:\wamp\www\libs\pdo2.php:32 Stack trace: #0 C:\wamp\www\libs\pdo2.php(32): PDO->__construct('mysql:host=loca...', 'root', 'XXXX') #1 C:\wamp\www\login.php(49): PDO2::getInstance() #2 C:\wamp\www\login.php(30): Login->authentification('user') #3 C:\wamp\www\login.php(11): Login->__construct('user') #4 {main} Fatal error: Call to a member function prepare() on a non-object [...]

et voici où il bute
<?php

public function authentification($login){
	
	require_once 'libs/pdo2.php';  // contient la classe PDO2, qui est un singleton de la classe PDO. Fonctionne correctement
	require_once 'user.php';
	
	$stmt_auth = $this->getStmt_auth();
	
	/* authentification
	 */
	
	try{
		$pdo = PDO2::getInstance();
                 // LA LIGNE JUSTE EN DESSOUS :
		$auth_user = $pdo->prepare($stmt_auth, array());
		$auth_user->execute(array(':nom' => $login));
		/*
		$auth_user = PDO2::getInstance()->prepare($stmt_auth, array());
		$auth_user->execute(array(':nom' => $login));
		*/
		
		// analyse du resultat $auth_user
		if( count($auth_user->fetchAll()) == 0){
			echo 'Mauvais login ou mot de passe';
			exit();
		}else{
			//creation d'un nouvel utilisateur
			$this->creationUser($login);
		}
	}catch(PDOException $pdoE){
		$pdoE->getMessage();
	}catch(Exception $e){
		$e->getMessage();
	}
	
} // fin authentification

?>

Et par acquis de conscience, je vous joins la classe PDO2 :
<?php
/**
 * Classe implémentant le singleton pour PDO
 * @author Savageman
 */

	// on definit les constantes :
	define("SQL_DSN", "mysql:host=localhost;dbname=XXXXX");
	define("SQL_USERNAME", "root");
	define("SQL_PASSWORD", "XXXX");


class PDO2 extends PDO {

	
	private static $_instance;
	
	
	/* Constructeur : héritage public obligatoire par héritage de PDO */
	public function __construct( ) {
	
	}
	// End of PDO2::__construct() */

	/* Singleton */
	public static function getInstance() {
	
		if (!isset(self::$_instance)) {
			
			try {
			
				self::$_instance = new PDO(SQL_DSN, SQL_USERNAME, SQL_PASSWORD);
											
			} catch (PDOException $e) {
			
				echo $e;
			}
		} 
		return self::$_instance; 
	}
	// End of PDO2::getInstance() */
}

?>
On m'a dit que c'était un problème de mot de passe, et après avoir bataillé sur mes machines virtuelles, j'en suis au point mort. Dans PhpMyAdmin, j'ai changé le mot de passe en allant dans Privilèges->Modifier le mot de passe (en rentrant 2 fois le mot de passe pour confirmer), puis j'ai bien entendu été dans le fichier de conf de phpmyadmin pour opérer le changement de mot de passe et être en mesure de me reconnecter. Et quand bien même j'allais modifier le mot de passe de l'utilisateur root dans Privilèges->Changement des informations de connexion / Copie d'utilisateur, et que dès lors l'accès à phpMyAdmin m'était refusé, ça ne marchait pas non plus.

En gros, c'est un SOS d'impuissance que je lance. Merci d'avance pour vos réponses.

devlop78
Invité n'ayant pas de compte PHPfrance

14 oct. 2010, 17:52

Ton exception a été lancée certainement par l'utilisation d'un mauvais nom d'utilisateur, mot de passe ou de serveur. 'root' est ici suspect

Invité
Invité n'ayant pas de compte PHPfrance

15 oct. 2010, 11:36

Et oui, j'aurais du porter des binocles. C'était bien le mot de passe qui était en cause. Désolé du dérangement. Tant d'efforts déployés pour une connerie pareille, ça me donnerait presque envie d'arrêter la substitution des "o" par un "0'.