Bonjour,

Voila je rencontre un petit problème avec mon code de connexion vers la base de donnée en PDO.

Le plus étonnant, c'est que quand je teste de me connecter vers la base de donnée et de m'afficher les enregistrements en mysql basique ou mysqli, tout fonctionne. Juste en version PDO que j'ai un soucis et je pense que ça vient de l'assignation du numéro de port de localhost.

VOICI MES DEUX CODE DE CONNEXION EN MYSQL BASIQUE ET MYSQLi :
MYSQL Basique

    $con=mysql_connect("127.0.0.1:8889", "root", "root");
     mysql_select_db('base_test',$con);
     $reponse = mysql_query("SELECT * FROM table_test ORDER BY id DESC");

MYSQLi

        $con = mysqli_connect('127.0.0.1:8889', 'root', 'root', 'base_test');
        $sql = "SELECT * FROM table_test ORDER BY id DESC";
        $req = $con->query($sql);

et voila mon PDO qui me présente des erreurs :

        define('DBHOST','127.0.0.1');
        define('DBPORT','8889');
        define('DBUSER','root');
        define('DBPASS','root');
        define('DBNAME','base_test');

        try {
            $con = new PDO("mysql:dbname=".DBNAME, DBUSER, DBPASS.";host=".DBHOST.";port=".DBPORT);
            $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo '<p>Connexion refusée : ' .$e->getMessage().'</p>';
            exit;
        }

        $sql = "SELECT * FROM table_test ORDER BY id DESC";    
        $req = $pdo->query($sql);

voici le code d'erreur :

ERROR!:SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

15 réponses


Bonjour.
Ta connexion n'est pas correcte.
Remplaces :

$con = new PDO("mysql:dbname=".DBNAME, DBUSER, DBPASS.";host=".DBHOST.";port=".DBPORT);

Par :

$con = new PDO("mysql:dbname=" . DBNAME . ";host=" . DBHOST . ";port= " . DBPORT . ", DBUSER, DBPASS);

Essayes avec ça:

$con = new PDO("mysql:dbname=".DBNAME.";host=".DBHOST.";port=".DBPORT, DBUSER, DBPASS);

Et vérifie que les identifiants sont corrects

Bessino
Auteur

Merci pour vos réponse @Lartak et @intelligid , mais ça ne fonctionne toujours pas.
Là le navigateur m'affiche qu'une page blanche et firebug m'affiche comme erreur : "NetworkError: 500 Internal Server Error - http://localhost:8888/testDatabase.php".

@intelligid > les identifiants sont corrects car quand je me connecte en mysql basique ou mysqli tout fonctionne normal.

Salut,

tu as fais un define 8889

define('DBPORT','8889');

Et dans l'erreur on voit 8888

Le port par défaut du serveur mysql est 3306 en général et non le port du serveur PHP.
Et si le port de ton serveur mysql est bien 3306, il t'est inutile de le spécifier dans la connexion à la BDD.

Ah d'accord.

Bessino
Auteur

Salut @SLK,
Oui j'ai fait un define du port : 8889 et de la base : base_test .

testDatabase : c'est mon fichier .php.
Le localhost se trouve sur le port : 8888
Et le mysql se trouve sur le port : 8889

Comme j'ai dis tout en haut, mon fichier testDatabse.php fonctionne bien et me sort bien les enregistrement enregistrer dans la base de donnée quand j'utilise :
LA METHODE MYSQL BASIQUE

    $con=mysql_connect("127.0.0.1:8889", "root", "root");
    mysql_select_db('base_test',$con);
    $reponse = mysql_query("SELECT * FROM table_test ORDER BY id DESC");

OU LA METHODE MYSQLi

        $con = mysqli_connect('127.0.0.1:8889', 'root', 'root', 'base_test');
        $sql = "SELECT * FROM table_test ORDER BY id DESC";
        $req = $con->query($sql);

Mais quand j'utilise : LA METHODE PDO COMME CECI:

        define('DBHOST','127.0.0.1');
        define('DBPORT','8889');
        define('DBUSER','root');
        define('DBPASS','root');
        define('DBNAME','base_test');

        try {
            $con = new PDO("mysql:dbname=".DBNAME, DBUSER, DBPASS.";host=".DBHOST.";port=".DBPORT);
            $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo '<p>Connexion refusée : ' .$e->getMessage().'</p>';
            exit;
        }

        $sql = "SELECT * FROM table_test ORDER BY id DESC";    
        $req = $pdo->query($sql);

CA M'AFFICHE CETTE ERREUR :

    ERROR!:SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

ET AVEC CE QUE @Lartak et @intelligid m'ont donnée

    @Lartak  :  $con = new PDO("mysql:dbname=" . DBNAME . ";host=" . DBHOST . ";port= " . DBPORT, DBUSER, DBPASS);
    @intelligid:  $con = new PDO("mysql:dbname=".DBNAME.";host=".DBHOST.";port=".DBPORT, DBUSER, DBPASS);

J'obtiens une page blanche avec cette erreur afficher avec Firebug :

    "NetworkError: 500 Internal Server Error - http://localhost:8888/testDatabase.php".
Bessino
Auteur

Sauf qu'ici @Lartak , mon mysql se trouve sur le port : 8889. Ce que je ne comprend pas c'est que pourquoi en mysql basique ou mysqli ça fonctionne et qu'en PDO non ?

Essaies de remplacer :

echo '<p>Connexion refusée : ' .$e->getMessage().'</p>';

Par :

die('Connexion refusée : ' .$e->getMessage());

Car si tu n'as pas d'erreur retourné par ton try catch, ça doit être parce que ton code doit continuer à s'exécuter malgrès le fait que tu aies mit un exit.

Bessino
Auteur

@Lartak : Toujours pas, je ne comprend pas du tout qu'est ce qui ne va pas ?!.....

Montres-nous ce que tu as exactement dans ta page testDatabase.php.

Bessino
Auteur

Voilà @Lartak

    <?php
            /********** MYSQL *************/
            // Connection avec la BDD.
            // $con=mysql_connect("127.0.0.1:8889", "root", "root");
            // mysql_select_db('base_test',$con);
            // $reponse = mysql_query("SELECT * FROM table_test ORDER BY id DESC");

            /********** PDO ***************/
            //set timezone
            // date_default_timezone_set('Europe/Paris');

            //CONSTANT CONFIG DB
            define('DBHOST','127.0.0.1');
            define('DBPORT','8889');
            define('DBUSER','root');
            define('DBPASS','root');
            define('DBNAME','base_test');

            try {
                // $con = new PDO("mysql:host=".DBHOST.";port=8889;dbname=".DBNAME, DBUSER, DBPASS);
                // $con = new PDO("mysql:dbname=".DBNAME, DBUSER, DBPASS.";host=".DBHOST.";port=".DBPORT);
                $con = new PDO("mysql:dbname=".DBNAME.";host=".DBHOST.";port=".DBPORT, DBUSER, DBPASS);
                $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            } catch (PDOException $e) {
                die('Connexion refusée:'.$e->getMessage());
                exit;
            }

            $sql = "SELECT * FROM table_test ORDER BY id DESC";    
            $req = $pdo->query($sql);

            /*********** MYSQLI *****************/
            // on se connecte à MySQL et on sélectionne la base
            // $con = mysqli_connect('127.0.0.1:8889', 'root', 'root', 'base_test');
            // $sql = "SELECT * FROM table_test ORDER BY id DESC";
            // $req = $con->query($sql);

    ?>

    <!doctype html>
    <html>
        <head>
            <meta charset="utf-8">
            <meta name="description" content="">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <title>Untitled</title>
            <link rel="stylesheet" href="css/style.css">
            <link rel="author" href="humans.txt">
        </head>
        <body>
            <table class="liste table">
                <tr>
                    <td style="border:none"></td>
                    <td style="font-weight:bold; background-color:#0075be; color:#ffffff;">Société</td>
                    <td style="font-weight:bold; background-color:#0075be; color:#ffffff;">Nom</td>
                    <td style="font-weight:bold; background-color:#0075be; color:#ffffff;">Prénom</td>
                    <td style="font-weight:bold; background-color:#0075be; color:#ffffff;">Adresse</td>
                    <td style="font-weight:bold; background-color:#0075be; color:#ffffff;">Code Postal</td>
                    <td style="font-weight:bold; background-color:#0075be; color:#ffffff;">Ville</td>
                    <td style="font-weight:bold; background-color:#0075be; color:#ffffff;">Email</td>
                    <td style="font-weight:bold; background-color:#0075be; color:#ffffff;">Téléphone</td>
                    <td style="font-weight:bold; background-color:#0075be; color:#ffffff;">Date</td>
                </tr>
                <?php
                    // On affiche les lignes du tableau une à l'aide d'une boucle
                    // while($donnees = mysql_fetch_array($reponse))
                    while($row = $req->fetch())
                    // while ($data = mysqli_fetch_array($req))
                    {
                ?>
                <tr>
                    <td id="numerotation"></td>
                    <td><?php echo $row['societe'];?></td>
                    <td><?php echo $row['nom'];?></td>
                    <td><?php echo $row['prenom'];?></td>
                    <td><?php echo $row['adresse'];?></td>
                    <td><?php echo $row['cp'];?></td>
                    <td><?php echo $row['ville'];?></td>
                    <td><?php echo $row['email'];?></td>
                    <td><?php echo $row['telephone'];?></td>
                    <td><?php echo $row['date'];?></td>
                </tr>
                <?php
                    }//Fin de la boucle
                    // mysql_close();
                    $req->closeCursor();
                    // mysqli_close($con);
                ?>
            </table>
            <script src="js/main.js"></script>
        </body>
    </html>

Ce qui devrait être la même variable, est utilisée avec 2 noms différents : $con, et $pdo.

Mais quand je lis le message d'erreur, je n'ai pas l'impression que ce soit lié...

Il y a une chose que je ne comprend pas, pourquoi tu utilises des constantes qui ne seront utilisées qu'une seule fois et ce dans le même fichier.
Soit tu crées un fichier qui contiendra toutes tes constantes et qui sera inclut sur toutes tes pages, ou alors tu n'utilises pas de constante pour la connexion à la base de données.
Quel est l'intérêt de créer des constantes pour la connexion à la base de données, si celles-ci sont dans le même fichier que la connexion de la base de données ?
Je pensais que tu avais seulement recopier les constantes concernant la base de données, mais si c'était le cas, tu aurais juste eu à inclure un fichier de constantes dans ton fichier testDatabase.php.

Bessino
Auteur

@Lartak , en effet j'ai bien sur séparé mes constants à la base , c'est juste que je n'arrivais pas à me connecter à ma base de donnée.
Du coup pour faire un petit test pour voir d'où vient le problème, j'ai créé le fichier testdatabas.php pour voir si avec les autres méthodes il y aussi un soucis au niveau de la connexion vers la base de donnée.
C'est comme ça que j'ai compris que seul en PDO que j'ai des soucis. Maintenant la question qui me tarode c'est : est ce que ça ne vient pas du driver PDO ? j'ai vérifié dans mes dossiers php dans mamp et j'ai vu qu'il manquait les fichiers php.so et phphmysql.so, alors que les extensions dans php.ini sont bien activé. Du coup, je ne sais pas si ça ne vient pas de là le soucis?