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
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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;

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    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).

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    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).

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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...)

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    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";

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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...

  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 : 59
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    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
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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)

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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...

  11. #11
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    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 ?

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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.

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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)

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    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 !).

  15. #15
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    Par défaut
    À la bonne heure!

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    À la bonne heure!
    Plutôt à l'heure tardive (23h53)

+ 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