Probleme de connection

Warning: PDO::query(): SQLSTATE[3D000]: Invalid catalog name: 1046 Aucune base n'a été sélectionnée in C:\wampk\www\leader\functions\home.func.php on line 7
et mon code
<?php
$dbhost = "localhost";
$dbname = "blog";
$dbuser = "root";
$dbpassword = ""; 
 try{
 $db = new PDO('mysql:host='.$dbhost.';$dbname='.$dbname,$dbuser,$dbpassword,array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES utf8', PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
}catch(PDOException $e){
 die('une erreur est survenue lors de la connexion a la base de donnee... ');
}
?>


Edit: ajout des balises de code.

3 réponses

  1. Bonjour

    $dbname, c'est le nom de ta base de données. Mais dans la chaîne de connexion (et non pas connection), le mot-clé pour donner le nom de la base de données, c'est dbname, pas $dbname. Relis bien ta requête en la comparant à l'exemple dont tu es parti.
    Comprends bien la différence entre le nom de variable $dbname que tu as choisi (tu aurais pu prendre $toto) et le mot dbname qui fait partie de la syntaxe de la requête, et que tu n'as pas le droit de modifier.
    1. Merci pour la correction
    2. Donc pour vous si je changeais seulement ca tout va bien aller?
      #le père?
    3. Le reste ne me choque pas, mais je ne te garantis pas qu'il n'y a pas d'autres erreurs. Dans cette partie de ton code ou une autre. Tu ne peux pas essayer ?
  2. Modérateur
    Bonjour,
    Ben si.. il faut justement que tu retires le $ devant le premier dbname....
    Essaye ceci
    <?php
    $dbhost = "localhost";
    $dbname = "blog";
    $dbuser = "root";
    $dbpassword = ""; 
    
    try{
       $db=new PDO('mysql:host=localhost;'.$dbhost .'='.$dbname .'; charset=utf8',$dbuser , $dbpassword );
       // Activation des erreurs PDO
       $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
       // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
       $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) {
        die('Erreur : ' . $e->getMessage());
    }
    


    Au passage, lorsque tu écrieras des requêtes.. pense également à les mettre dans des blocs TRY/CATCH pour voir les éventuelles erreurs..
    Comme ceci:
    //préparation de la requête et des variables
     $sql = "INSERT INTO matable (champ1,champ2)   VALUES (:valeur1,:autrevaleur)";
     $datas = array(':valeur1'=>$valeur1, ':autrevaleur'=>$toto);
    
    //Execution de la requete
    try{
      $requete = $db-> prepare($sql) ;
      $requete->execute($datas) ;
    }catch(Exception $e){
      // en cas d'erreur :
       echo " Erreur ! ".$e->getMessage();
       echo " Les datas : " ;
       print_r($datas);
    }