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 :

La connexion en local échoue [PDO]


Sujet :

PHP & Base de données

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut La connexion en local échoue
    Bonjour,

    je tente une connexion en local, mais ça échoue (y a un sablier qui s'affiche mais ne s'arrête jamais (même au bout de plusieurs minutes))

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function debug($location, $var)  //var_dump amélioré
    {
        echo "<br/>".(is_string($location))?$location:''."<br/><pre>";
        var_dump($var);
        echo "</pre><br/>";
    }
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "nom_bdd";
    $connect="mysql:host=".$servername.";dbname=".$dbname.",".$username.",".$password;
    debug("elevage test 14 connect",$connect);
    $mysql = new PDO($connect);
    debug("elevage test 15 mysql",$mysql);exit;
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Le login et le mot de passe sont respectivement le deuxième et le troisième paramètre du constructeur de PDO, ils ne sont donc pas à concaténer avec le premier paramètre.
    Autre chose, sur Unix/linux, localhost provoquera des résultats inattendus, mieux vaut le remplacer par son IP correspondante (probablement 127.0.0.1).
    Ajoute aussi le port de connexion (probablement 3306) ainsi que le charset adéquate (utf8mb4).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse qui me permet d'avancer mais pas encore d'aboutir...

    Code php : 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
    <?php
    function debug($location, $var)  //var_dump amélioré
    {
        echo "<br/>".(is_string($location))?$location:''."<br/><pre>";
        var_dump($var);
        echo "</pre><br/>";
    }
     
    $servername="120.0.0.1";
    $username = "root";
    $password = "";
    $dbname = "elevage";
    $dsn='mysql:host='.$servername.';port=3306';
    $dsn.='dbname='.$dbname.';charset=utf8';
    $mysql = new PDO($dsn,$username,$password);
    debug('elevage test.php 16 mysql',$mysql);exit();

    Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Une tentative de connexion a échoué car le parti connecté n’a pas répondu convenablement au-delà d’une certaine durée ou une connexion établie a échoué car l’hôte de connexion n’a pas répondu. in C:\projets\dvp\elevage\test.php on line 15
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $servername="120.0.0.1";
    C'est pas plutôt 127 que 120? (Je n'utilise pas xampp, mais j'imagine qu'il doit y avoir un moyen de savoir quelle IP et quel port est utilisé par le serveur SQL).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Bien vu...

    Code php : 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
    <?php
    function debug($location, $var)  //var_dump amélioré
    {
        echo "<br/>".(is_string($location))?$location:''."<br/><pre>";
        var_dump($var);
        echo "</pre><br/>";
    }
     
    $servername="127.0.0.1";
    $username = "root";
    $password = "";
    $dbname = "elevage";
    $dsn='mysql:host='.$servername.';port=3306';
    $dsn.='dbname='.$dbname.';charset=utf8';
    $mysql = new PDO($dsn,$username,$password);
    debug('elevage test.php 16 mysql',$mysql);exit();
    Mais avec ça, retour du sablier (ça doit faire 2 heures qu'il tourne...)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Il manque aussi un point-virgule après le port. D'ailleurs tu devrais utiliser les doubles quotes dans ce cas là, tu y verrais plus clair:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dsn = "mysql:host=$servername;port=3306;dbname=$dbname;charset=utf8";
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci; j'ai corrigé :
    Code php : 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
    <?php
    function debug($location, $var)  //var_dump amélioré
    {
        echo "<br/>".(is_string($location))?$location:''."<br/><pre>";
        var_dump($var);
        echo "</pre><br/>";
    }
     
    $servername="127.0.0.1";
    $username = "root";
    $password = "";
    $dbname = "elevage";
    $dsn="mysql:host=".$servername.";port=3306;";
    $dsn.="dbname=".$dbname.";charset=utf8";
    $mysql = new PDO($dsn,$username,$password);
    debug('elevage test.php 16 mysql',$mysql);exit();
    mais j'ai encore le sablier...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #8
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bonjour Laurent,

    Repars dans l'autre sens.
    Ecris en dur un PDO qui fonctionne, et mets les variables après pour reproduire ta chaîne. Tu y verras plus clair.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse Sylvie.
    J'avoue ne pas comprendre...

    pour moi (pour me rappeler où c'est) : dvp test.php (à la racine)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Pour pouvoir tester des idées avant de poster sur le forum, c'est nécessaire, mais toujours pas au point

    dvp/precsuiv/testprecsuiv.php :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //connexion
    $HOST="127.0.0.1";
    $DB_NAME="precsuiv";
    $USER="root";
    $PASS="";
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
    $pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
    $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
    $my_cnx=new PDO('mysql:host=' . $HOST . ';dbname=' .$DB_NAME, $USER,$PASS, $pdo_options);
     
    $sql="select id_personne,nom,prenom from `personnes`";
    $qid=$pdo->prepare($sql);
    $qid->execute(array());
    encore le sablier...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #11
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Attention à ce que tu écris: ta connexion s'appelle $my_cnx ou $pdo ?

    À tout hasard, est-ce que tu utilises le bon mot de passe pour te connecter au serveur ?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Zut, j'avais vu l'erreur pour le PDOStatement et corrigé, mais visiblement, j'ai fait le copier-coller avant...

    Tu me parles aussi du mot de passe. Pour moi, en local, le mot de passe est vide.

    J'ai aussi essayé le script de connexion de Dendrite :
    db_mysql.php :
    Code php : 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
    <?php
    // @author : rawsrc - 2018 - Pour DVP
    // on vérifie si la fonction de connexion a déjà été définie afin d'éviter de la redéfinir
    if ( ! function_exists('db_connexion')) {
        function db_connexion() {
            // une fois ouverte, on renvoie toujours la même connexion
            static $pdo;
            // on vérifie si la connexion n'a pas déjà été initialisée
            if ( ! ($pdo instanceof PDO)) {
                // tentative d'ouverture de la connexion MySQL
                try {
                    $pdo = new PDO('mysql:host="Localhost";port=3306;dbname="precsuiv";charset=utf8','root', '', [
                        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                        PDO::ATTR_EMULATE_PREPARES   => false
                    ]);
                }
                catch (PDOException $e) {
                    echo 'Erreur connexion à la base de données : '.$e->getMessage(); //j'ai remplacé le throw new InvalidArgumentException par un simple echo
                    exit;
                }
            }
            // renvoi de la ressource : connexion à la base de données
            return $pdo;
        }
    }
    return db_connexion();

    et test.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    $db = include 'db_mysql.php';

    et
    Erreur connexion à la base de données : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: H�te inconnu.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  13. #13
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    En fait, je crois avoir fait des conclusions hâtives. en effet, je m'étais dit qu'en local, on a toujours port=3306 et $pwd="". Pour vérifier cela, j'ai regardé comment avait fait rawsrc y a quelques temps (semaines) sur une appli à moi. Et on a port=15432 et $pwd="root" (mais on avait $user="root", host=localhost et connect_timeout=5). Je lui ai posé la question. Peut-être, aurai-je une réponse demain. En savez-vous plus sur la question ? (valeur des paramètres)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  14. #14
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Ca y est ; c'est au point

    J'ai pris les paramètres qu'avait pris rawsrc et surtout, j'ai supprimé les guillemets dans le script de connexion :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                try {
                    $pdo = new PDO('mysql:host=127.0.0.1;port=15432;dbname=precsuiv;charset=utf8','root', 'root', [
                        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                        PDO::ATTR_EMULATE_PREPARES   => false
                    ]);
                }
                catch (PDOException $e) {
                    echo 'Erreur connexion à la base de données : '.$e->getMessage();
                    exit;
                }
    Ainsi, le script de Dendrite fonctionne.

    Pour info, je n'utilise plus aucun outil (Wampserver ou Xampp) ; rawsrc m'a installé un serveur local PHP. C'est génial (super pratique) et au moins, on maîtrise complètement (surtout lui !).
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  15. #15
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    À la bonne heure!
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  16. #16
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    À la bonne heure!
    Plutôt à l'heure tardive (23h53)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

Discussions similaires

  1. Pb de connexion en local avec user ldap
    Par crenaze dans le forum Réseau
    Réponses: 1
    Dernier message: 31/01/2007, 14h44
  2. différence de connexion listener/local
    Par jokos2000 dans le forum Oracle
    Réponses: 1
    Dernier message: 12/01/2007, 14h54
  3. [WINDOWS] : Pbl adresse ip connexion reseau local
    Par forsay1 dans le forum Administration
    Réponses: 2
    Dernier message: 27/07/2006, 16h28
  4. Probleme quand j'essaie de reparer ma connexion reseau local
    Par dachir dans le forum Administration
    Réponses: 5
    Dernier message: 21/07/2006, 16h22
  5. Réponses: 28
    Dernier message: 28/07/2005, 14h12

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