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.