IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Pas de connexion bdd [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de Yvon73
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 31
    Par défaut Pas de connexion bdd
    Bonjour et bonne année à tous,

    J'ai un souci de connexion à ma bdd. J'ai créé un fichier inc_connexion.php sensé établir la connexion avec ma bdd et mon fichier index.php sauf que celui-ci ne le fait pas et me retourne un gentil message d'erreur.
    Quand je test la requête seul dans l'utilitaire SQL, ça fonctionne sans problèmes.
    Si je mets la même requête dans la variable query, plus rien fonctionne. Si je supprime la fin de ligne à partir du INNER JOIN, la ça fonctionne.
    Voici le message d'erreur ;
    Fatal error: Uncaught PDOException: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected in D:\xampp\htdocs\Departements\admin\index.php:34 Stack trace: #0 D:\xampp\htdocs\Departements\admin\index.php(34): PDO->query('SELECT villes_p...') #1 {main} thrown in D:\xampp\htdocs\Departements\admin\index.php on line 34

    Voici les deux fichiers;

    inc_connexion.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?php
        class Database
        {
            /**
             * Déclarations variables connexion à la base de données
             */
     
            private static $dbHost = "localhost";
            private static $dbName = "db_france";
            private static $dbUsername = "root";
            private static $dbUserPassword = "";
     
            private static $connection = NULL;
     
            public static function connect() {
                if (self::$connection == NULL) {
                    try {
                        self::$connection = new PDO("mysql:host=" . self::$dbHost . "; dbName =" . self::$dbName, self::$dbUsername, self::$dbUserPassword);
                        self::$connection -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    }
                    catch (PDOException $e) {
                        die($e -> getMessage());
                    }
                }
         return self::$connection;
            }
     
            public static function disconnect() {
         self::$connection = NULL;
            }
        }
    et index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <!doctype html>
    <html lang = "fr">
        <head>
            <meta charset = "UTF-8">
            <meta name = "viewport" content = "width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
            <meta http-equiv = "X-UA-Compatible" content = "ie=edge">
            <link rel="stylesheet" type="text/css" href="../css/styles.css">
            <title>Administration</title>
        </head>
        <body>
        <main id="container">
            <header id="head">
                <h1 id="titre">Départements et régions de France</h1>
            </header>
            <section id="tableau">
                <table>
                    <caption>Liste des villes et régions</caption>
                    <thead>
                    <tr>
                        <th>Ville</th>
                        <th>Numéro</th>
                        <th>Départements</th>
                        <th>Régions</th>
                        <th>Actions</th>
                    </tr>
                    </thead>
                    <tbody>
                    <?php
                        require_once 'inc_connexion.php';
                        $db = Database::connect();
                        $statement = $db->query('SELECT villes_prefecture.nom_ville, villes_prefecture.texte_ville, villes_prefecture.sp_dept, regions.nom_region FROM villes_prefecture INNER JOIN regions ON
    regions.id = villes_prefecture.region');
                        while ($item = $statement->fetch()) {
                            echo '<tr>';
                            echo '<td width="200">' . $item['nom_ville'] . '</td>';
                            echo '<td width="28">' . $item['numero'] . '</td>';
                            echo '<td width="200">' . $item['nom_ville'] . '</td>';
                            echo '<td width="300">' . $item['nom_region'] . '</td>';
                            echo '<td width="350">';
                            echo '<a class="bouton" href="view.php?id=' . $item['dept_id'] . '"> Voir</a>';
                            echo '<a class="bouton" href="update.php?id=' . $item['dept_id'] . '"> Modifier</a>';
                            echo '<a class="bouton" href="delete.php?id=' . $item['dept_id'] . '"> Supprimer</a>';
                            echo '</td>';
                            echo '</tr>';
                        }
                        Database::disconnect();
                    ?>
     
                    </tbody>
                </table>
            </section>
        </main>
        </body>
    </html>
    Si quelqu'un peut m'expliquer mon erreur, je l'en remercie d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as des espaces qui trainent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self::$connection = new PDO("mysql:host=" . self::$dbHost . ";dbname=" . self::$dbName, self::$dbUsername, self::$dbUserPassword);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti Avatar de Yvon73
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 31
    Par défaut
    Bonjour Sabotage,

    Merci pour t'a réponse, mais même en supprimant les espaces, je n'est rien.

    J'ai pourtant vérifié plusieurs fois le code, pour voir si il n'y a pas d'erreur d'écriture, tout est correct, je comprends pas.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as toujours exactement la même erreur ?
    Tu peux nous montrer le nouveau code ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti Avatar de Yvon73
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 31
    Par défaut
    Le message d'erreur est

    Fatal error: Uncaught Error: Call to a member function query() on null in D:\xampp\htdocs\Europe\admin\index.php:30 Stack trace: #0 {main} thrown in D:\xampp\htdocs\Europe\admin\index.php on line 30

    Pour le code, pas de soucis il y a rien de secret

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <?php
     
    	/**
    	 * Déclarations variables connexion à la base de données
    	 */
     
    	class Database {
     
    		private static $dbHost = "localhost:8095";
    		private static $dbName = "bdeurope";
    		private static $dbUsername = "root";
    		private static $dbUserpassword = "";
    		private static $connection = NULL;
     
    		public static function connect() {
     
    			if (self::$connection = NULL) {
     
    				try {
    					self::$connection = new PDO("mysql:host=" . self::$dbHost . ";dbName=" . self::$dbName , self::$dbUsername, self::$dbUserpassword);
    				}
    				catch (PDOException $e) {
    					die($e->getMessage());
    				}
    			}
    	  		return self::$connection;
    		}
     
    		public static function disconnect() {
    	  		self::$connection = NULL;
    		}
      	}
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    <!doctype html>
    <html lang = "fr">
    <head>
    	<meta charset = "UTF-8">
    	<meta name = "viewport" content = "width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    	<meta http-equiv = "X-UA-Compatible" content = "ie=edge">
    	<link rel="stylesheet" type="text/css" href="../css/styles.css">
    	<title>Administration</title>
    </head>
    <body>
    <main id="container">
    	<header id="head">
    		<h1 id="titre"><strong>Liste des items  </strong><a class="boutton" href="insert.php">Ajouter</a></h1>
    	</header>
    	<section id="tableau">
    		<table>
    			<thead>
    			<tr>
    				<th>Villes</th>
    				<th>Départments</th>
    				<th>Régions</th>
    				<th>Pays</th>
    				<th>Actions</th>
    			</tr>
    			</thead>
    			<tbody>
    				<?php
    					require 'inc_connexion.php';
    					$db = Database::connect();
    					$statement = $db->query('SELECT * FROM province');
    					while($item = $statement->fetch()) {
    						echo '<tr>';
    						echo '<td>' . $item['prov_cptl'] .'</td>';
    						echo '<td>' . $item['prov_name'] . '</td>';
    						echo '<td>' . $item['region_name'] . '</td>';
    						echo '<td>' . $item['prov_pays'] . '</td>';
    						echo '<td>
    
    							</td>';
    						echo '</tr>';
    					}
     
    					Database::disconnect();
    				?>
    			</tbody>
    		</table>
    	</section>
    </main>
     
     
    </body>
    </html>
    La requête est comme ça pour voir si quelque chose veuille bien s'afficher.

    J'ai tout repris de zéro, pour voir, mais ça change rien

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Donc tu n'as pas du tout la même erreur qu'au début nous sommes d'accord ou pas ?

    Tu as mis = NULL au lieu de == NULL dans ta condition dans ce nouveau code et il y a un port 8095 qui est apparu.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti Avatar de Yvon73
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 31
    Par défaut
    Tout a fait d'accord, pour le port c'est le dernier essai que j'ai fais, j'ai oublié de le supprimer dans la présentation.

    Correction faite dans la conditions, mais ça ne fonctionne toujours pas

    Ah et l'erreur à changé

    Fatal error: Uncaught Error: Call to a member function fetch() on boolean in D:\xampp\htdocs\Europe\admin\index.php:31 Stack trace: #0 {main} thrown in D:\xampp\htdocs\Europe\admin\index.php on line 31

    C'est cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($item = $statement->fetch())

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faut faire un debugage précis et ne pas tester au hasard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $db = Database::connect();
    var_dump($db);
    $statement = $db->query('SELECT * FROM province');
    var_dump($statement);
    et bien sûr activer les erreurs PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self::$connection = new PDO("mysql:host=" . self::$dbHost . ";dbName=" . self::$dbName , self::$dbUsername, self::$dbUserpassword, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti Avatar de Yvon73
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 31
    Par défaut
    retour var_dump

    object(PDO)#1 (0) { } bool(false)
    Fatal error: Uncaught Error: Call to a member function fetch() on boolean in D:\xampp\htdocs\Europe\admin\index.php:33 Stack trace: #0 {main} thrown in D:\xampp\htdocs\Europe\admin\index.php on line 33

    Avec le array

    object(PDO)#1 (0) { }
    Fatal error: Uncaught PDOException: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected in D:\xampp\htdocs\Europe\admin\index.php:31 Stack trace: #0 D:\xampp\htdocs\Europe\admin\index.php(31): PDO->query('SELECT * FROM p...') #1 {main} thrown in D:\xampp\htdocs\Europe\admin\index.php on line 31

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est pas avec l'un et avec l'autre, il faut mettre l'exception ET les var_dump. Sinon on ne recoupe rien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre averti Avatar de Yvon73
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 31
    Par défaut
    le second message est avec les deux, var_dump et Exception

    J'avais déjà essayé, mais rien de concluant

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Debug directement dans la classe pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    				try {
    					$connection = new PDO("mysql:host=" . self::$dbHost . ";dbName=" . self::$dbName , self::$dbUsername, self::$dbUserpassword, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    				}
    				catch (PDOException $e) {
    					die($e->getMessage());
    				}
    var_dump($connection);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre averti Avatar de Yvon73
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 31
    Par défaut
    Bonjour,

    en faisant dans la conditions, il me retourne ça

    Notice: Undefined variable: connection in D:\xampp\htdocs\Europe\admin\inc_connexion.php on line 25
    NULL
    Fatal error: Uncaught PDOException: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected in D:\xampp\htdocs\Europe\admin\index.php:30 Stack trace: #0 D:\xampp\htdocs\Europe\admin\index.php(30): PDO->query('SELECT * FROM p...') #1 {main} thrown in D:\xampp\htdocs\Europe\admin\index.php on line 30

    Phpstorm me le mets en variable non definit, ça explique peut être le message d'erreur.

    J'ai tenté de mettre le var_dump en fin condition et après en début, le message est identique, seul le numéro de la ligne change.

  14. #14
    Membre averti Avatar de Yvon73
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 31
    Par défaut


    J'ai résolu le problème !!!

    En changeant la plate-forme Apache/PHP/MySQL, les messages d'erreur se sont enfin dissipé. J'ai juste écris bdeurope.province après FROM et mon tableau est apparut.

    Me reste plus qu'a refaire la requête pour voir ce que je veux afficher.

    Merci pour ton aide Sabotage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connexion bdd qui echoue en local et pas en réseau
    Par lorinthal dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 29/03/2015, 12h12
  2. Réponses: 5
    Dernier message: 28/01/2009, 16h17
  3. [tomcat][jsp] Comment gerez vous vos connexions bdd?
    Par olive.m dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 21/06/2004, 17h35
  4. pb de connexion bdd
    Par picoti2 dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/03/2004, 18h53
  5. [BCB6] DBGrid et mode de connexion BDD... demain
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/01/2004, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo