Pdo bogué
Résolu
loulou
-
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
pdo renvoie l'erreur
"SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)"
alors que la base, l'hote, l'utilisateur et le mot de passe sont correct.
J'ai activé toutes les extensions pdo sauf pdo_firebird.
J'utilise un raspberrypi pour héberger mon site personnel.
Je suis sous raspbian, j'utilise php 7.4, mariadb-server et apache2.
Le code pour se connecter à mysql est :
$host = '127.0.0.1';
$dbname = 'chat';
$username = 'root';
$password = 'mon mdp';
if(isset($_POST['insert'])){
try {
// se connecter à mysql
$pdo = new PDO("mysql:host=$host;dbname=$dbname","$username","$password");
} catch (PDOException $exc) {
echo $exc->getMessage();
exit();
}
"SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)"
alors que la base, l'hote, l'utilisateur et le mot de passe sont correct.
J'ai activé toutes les extensions pdo sauf pdo_firebird.
J'utilise un raspberrypi pour héberger mon site personnel.
Je suis sous raspbian, j'utilise php 7.4, mariadb-server et apache2.
Le code pour se connecter à mysql est :
$host = '127.0.0.1';
$dbname = 'chat';
$username = 'root';
$password = 'mon mdp';
if(isset($_POST['insert'])){
try {
// se connecter à mysql
$pdo = new PDO("mysql:host=$host;dbname=$dbname","$username","$password");
} catch (PDOException $exc) {
echo $exc->getMessage();
exit();
}
4 réponses
-
Bonjour,
Déjà, merci d'utiliser les balises de code lorsque tu postes du code sur le forum.
Explications ( à lire entièrement ! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ensuite,
ça ne sert à rien de placer le code de connexion à la bdd que si ton formuaire est envoyé..... place le directement au début de ton code.
Pense aussi à activer l'affichage des erreurs PHP ainsi que l'affichage des erreurs PDO.
<?php //Affichage des erreurs php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //connexion à la bdd $host = '127.0.0.1'; $dbname = 'chat'; $username = 'root'; $password = 'mon mdp'; try{ $bdd =new PDO('mysql:host='.$host.';dbname='.$dbname.'; charset=utf8', $username, $password); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } if(isset($_POST['insert'])){ /** //exemple d'utilisation d'une requête préparée en pdo: //préparation de la requête et des variables $sql = "INSERT INTO tatable (champ1,champ2) VALUES (:valeur1,:autrevaleur)"; $datas = array(':valeur1'=>$valeur1, ':autrevaleur'=>$toto); //Execution de la requete (il n'y a rien à toucher dans les lignes ci-dessous) try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } */ }
Et puis,
As tu d'autres fichiers php ? n'aurais tu pas écrit le code de connexion à la bdd ailleurs ? (que tu aurais laissé en "localhost" au lieu de "127.0.0.1" ? )
Par contre, comment sais tu que le user et le password sont bons ?
Tu arrives à te connecter à la bdd par un autre moyen avec ces identifiants ( en ligne de commande par exemple ? ) Il faudrait faire ce teste la en premier pour être certains que les infos sont bonnes.
-
J'arrive à me connecter à la bdd via "sudo mysql" et avec mysqli.
Si vous voulez le code complet est :<?php // Initialiser la session session_start(); // Vérifiez si l'utilisateur est connecté, sinon redirigez-le vers la page de connexion if(!isset($_SESSION["username"])){ header("Location: login.php"); exit(); } $host = '127.0.0.1'; $dbname = 'chat'; $username = 'root'; $password = 'mon mdp'; if(isset($_POST['insert'])){ try { // se connecter à mysql $pdo = new PDO("mysql:host=$host;dbname=$dbname","$username","$password"); } catch (PDOException $exc) { echo $exc->getMessage(); exit(); } // récupérer les valeurs $pseudo = $_SESSION["username"]; $message = htmlspecialchars($_POST['message']); // Requête mysql pour insérer des données $sql = "INSERT INTO `chatbox`(`pseudo`, `message`) VALUES (:pseudo,:message)"; $res = $pdo->prepare($sql); $exec = $res->execute(array(":pseudo"=>$pseudo,":message"=>$message)); // vérifier si la requête d'insertion a réussi if($exec){ $alerte = 'Message envoyé !!!'; }else{ echo "Échec de l'opération d'insertion"; } } header("refresh: 15;"); ?> <!DOCTYPE html> <html> <head> <META NAME="ROBOTS" content="none"> <title>Tableau de bord</title> <link rel="stylesheet" href="style.css" /> </head> <body> <div class="sucess"> <h1>Bienvenue <?php echo $_SESSION['username']; ?> !</h1> <p>C'est votre tableau de bord.</p> <a href="logout.php">Déconnexion</a> </div> <form action="" method="post" class="box"> <?php if (! empty($message)) { ?> <p class="errorMessage"><?php echo $alerte; ?></p> <?php } ?> <textarea type="text" name="message" placeholder="message" class="textarea"></textarea> <input type="submit" name="insert" value="Envoyer" class="box-button"> <p></br></p> <?php $host = 'localhost'; $dbname = 'chat'; $username = 'root'; $password = 'mon mdp'; try { // se connecter à mysql $pdo = new PDO("mysql:host=$host;dbname=$dbname","$username","$password"); } catch (PDOException $exc) { echo $exc->getMessage(); exit(); } $req = $pdo->query("SELECT * FROM chatbox ORDER BY ID DESC LIMIT 20"); while($msg = $req->fetch()){ ?> <p align="center"><font color="#003cff"><b><?php echo $msg['pseudo'] ?> :</b> <?php echo $msg['message'] ?></font></p> <?php } ?> </form> </body> </html>EDIT : Ajout des BALISES DE CODE !!
-
Tu peux m'explilquer pourquoi tu essayes de REFAIRE une connexion aux lignes 58 -> 68 ... alors que tu en a déjà une aux lignes 14 à 20 ??
Surtout que dans cette seconde connexion tu as utilisé 'localhost" ( ah tiens.. ça correspond à ton message d'erreur contrairement au premier code que tu nous as montré... )
Bref.. il ne faut qu'une seule connexion... la première...
-
-
Je refais une connexion pour récupérer les messages du tchat.
La premiere connexion sert uniquement à envoyer les messages dans la bdd. -
Mince, je viens de me rendre compte que je n'ai pas modifié le mot de passe de la 2eme connexion en installant le site sur le raspberrypi.