Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connexion à la BDD avec PDO

Erreur inconnue

Sujet résolu
    24 avril 2010 à 14:31:26

    Bonjour,

    J'aimerais mettre le code PHP d'un de mes sites à jour.

    Avant, je me connectais comme ca :

    <?php
    
    // Je me connecte 
    mysql_connect(DB_HOST, DB_LOGIN, DB_PASS);
    mysql_select_db(DB_BDD);
    
    ?>
    


    Maintenant j'utilise comme dans le tutoriel du site :

    <?php
    try
    {
    	$bdd = new PDO('mysql:host=serveur_mysql;dbname=nom_bdd', 'login_bdd', 'mdp');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
    ?>
    


    J'ai remplacer mes identifiants pour mettre le code, mais dans mon fichier ils sont correct.


    Et voici l'erreur qui ressort une fois le site sur l'hébergeur :

    Citation : Mon site

    Erreur SQL !
    SELECT COUNT(id) as nbFilms FROM films
    Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)




    Voila. Les identifiants de connexion sont correct. J'ai mis n'importe quoi comme mot de passe ou comme login pour voir si la même erreur ressortais, et la j'avais une erreur du type : Accès non autorisée pour "pseudo fake". Donc le problème de ne viens pas de là.

    Je vous remercie d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
      24 avril 2010 à 14:35:25

      l'host s'appel vraiment serveur_mysql ?
      • Partager sur Facebook
      • Partager sur Twitter
        24 avril 2010 à 14:42:07

        Citation : iTera

        J'ai remplacer mes identifiants pour mettre le code



        Non, c'est sql5.quelquechose.net ;)
        • Partager sur Facebook
        • Partager sur Twitter
          24 avril 2010 à 14:44:08

          identifiants ne veux pas dire host ...

          tu es sûr que PDO est disponible sur ton hebergeur ?
          • Partager sur Facebook
          • Partager sur Twitter
            24 avril 2010 à 14:48:04

            Re,

            Ton host est mauvais et je pense que tu es chez OVH.

            ++
            • Partager sur Facebook
            • Partager sur Twitter
              24 avril 2010 à 14:52:54

              Non je suis pas chez OVH.

              Mais merci pour la réponse, je sais désormais que cette ligne de code n'est tout simplement pas utilisable sur mon hébergeur ;)
              • Partager sur Facebook
              • Partager sur Twitter
                24 avril 2010 à 14:54:11

                Re,

                N'importe quoi. Si c'était le cas, tu aurais un parse error du genre PDO class not found.

                ++
                • Partager sur Facebook
                • Partager sur Twitter
                  24 avril 2010 à 15:17:26

                  Alors c'est quoi le problème exactement ? Parce que ce code aussi ne fonctionne pas alors qu'il ne contient pas d'erreurs :

                  <?php
                  
                  $connexion = mysql_pconnect (DB_HOST, DB_LOGIN, DB_PASS);
                  
                  if (!$connexion) {
                  	echo "Désolé, connexion au serveur de la base de donnée impossible !";
                  	exit;
                  }
                  
                  elseif (!mysql_select_db (DB_DBB, $connexion)) {
                  	echo "Désolé, accès à la base de donnée impossible !";
                  	exit;
                  }
                  
                  else {
                  	echo "Connexion à la base de donnée réussie avec succès";
                  }
                  
                  ?>
                  



                  Et l'erreur retournée est :

                  Citation : Mon site

                  Désolé, accès à la base de donnée impossible !




                  Je ne compte changer d'hébergeur. Il y a donc une façon d'arranger le problème ?

                  Au niveau de mon php.ini, voici ce que je peut modifier :

                  Register_globals, Memory_limit, max_execution_time, file_uploads, max_input_time, upload_max_filesize, post_max_size, register_argc_argv, magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase, display_errors, session.gc_maxlifetime, allow_url_fopen
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 avril 2010 à 15:20:36

                    Le plus simple pour connaitre la véritable erreur, c'est de retourner les erreurs...
                    Rajoutes cette ligne après la connexion

                    <?php
                    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 avril 2010 à 16:05:00

                      jordan a raison, son serveur n'est probablement pas le bon. MySQL n'est pas lancé ou tout simplement pas installé.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 avril 2010 à 16:09:08

                        <?php
                        phpinfo();
                        ?>
                        

                        Pourquoi se tordre le cou à faire des supposition quand on peut être fixé par un simple test ? :-°
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 avril 2010 à 16:10:47

                          Avec un echo ça serait mieux Darth Killer ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 avril 2010 à 16:12:46

                            Euh pas vraiment non. Tu confonds avec phpversion() or ce n'est pas la version de php que je montrais mais les détails de tous les modules chargés :p
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 avril 2010 à 16:14:19

                              Et en quoi un phpinfo() réglera le problème...?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 avril 2010 à 16:15:32

                                Il ne règlera pas le problème, mais montrera une bonne fois pour toute ce dont dispose le serveur, au lieu de se crêper le chignon entre nous. :p
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 avril 2010 à 16:21:54

                                  C'est pas important, on sait déjà tout ce qu'on a besoin : PDO et pdo_mysql sont installés et il tourne sous PHP5 ou mieux.

                                  Cette erreur se lance quand PDO ne trouve pas le serveur MySQL, donc soit il n'est pas installé, soit il n'est pas lancé, soit il se trompe de host.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 avril 2010 à 16:23:33

                                    J'avais remarqué, mais j'ai aussi remarqué qu'itera n'était pas super convaincue :-°
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 avril 2010 à 17:07:02

                                      Voici mon phpinfo : http://terafr.power-heberg.com/phpinfo.php

                                      Ce je trouve curieux, c'est que vous vous demandez si mysql est installer ou non alors que je vous dis que avec mon premier bout de code, je sais me connecter, donc j'ai forcement mysql d'installer ;)

                                      Maintenant, il est peut-être installer sur un autre serveur...

                                      Enfin bref, vous avez mon phpinfo maintenant :)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 avril 2010 à 17:10:14

                                        Voilà, PDO et pdo_mysql sont présents et actifs, CQFD. Plus personne ne devrait dire de bêtise à ce sujet maintenant. :D

                                        Maintenant, je l'ai pas dit dès le début, mais je suis de l'avis de Fayden que tes identifiants son incorrect. Je serais même plus précis : tu demande à PDO de se connecter via un socket alors que ce n'est sans doute pas un socket mais un serveur hôte que tu as à disposition. :p
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          24 avril 2010 à 17:14:57

                                          Oui en effet c'est un serveur hôte. Du moins je le pense fortement, et on va vite être fixé.

                                          Comment dois-je m'y prendre pour me connecter alors ? Parce que mes identifiants sont plus que correct ;)

                                          Encore une fois, merci d'avance :)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            24 avril 2010 à 17:21:12

                                            en PDO, dans le $dns, soit tu utilise un socket avec l'instruction unix_socket=, soit tu utilise un hôte avec l'instruction host=, en précisant éventuellement dans ce cas un port avec l'instruction port=.

                                            Doc sur le DNS de PDO_MySQL
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              24 avril 2010 à 17:31:12

                                              J'utilise bien "host=", j'ai du mal à suivre la :s
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                24 avril 2010 à 17:32:13

                                                Pourquoi le message d'erreur parlerait-il de socket si tu utilises host ? :-°

                                                A quoi ressemble ton hôte ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  24 avril 2010 à 17:34:47

                                                  Mon code :

                                                  <?php
                                                  try
                                                  {
                                                  	$bdd = new PDO('mysql:host=serveur_mysql;dbname=nom_bdd', 'login_bdd', 'mdp');
                                                  }
                                                  catch (Exception $e)
                                                  {
                                                          die('Erreur : ' . $e->getMessage());
                                                  }
                                                  ?>
                                                  


                                                  Il y a bien 'mysql:host=...' si c'est bien de cela que tu parles.

                                                  Pour mon hote, j'imagine que tu parles de l'accès à la BDD.
                                                  L'accès à phpmyadmin est : mysql.monhebergeur.fr
                                                  L'accès à ma base : sql5.monhebergeur.fr


                                                  EDIT :

                                                  J'avais mis DBB comme constante et BDD lors de la connexion. Autant pour moi... ;)

                                                  Un grand merci ;)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    24 avril 2010 à 17:37:36

                                                    ton hôte c'est le serveur SQL sur lequel se trouve ta bdd.

                                                    Par exemple chez Free c'est sql.free.fr
                                                    L'accès à PHPMyAdmin osef : c'est juste un emplacement web particulier.
                                                    Donc à mon avis ton hôte c'est sql5.biduletrucmuche
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      24 avril 2010 à 18:16:49

                                                      En fait ca marchait avec un autre code, j'ai toujours le même problème :/
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        24 avril 2010 à 18:19:06

                                                        Non, même hébergeur, même page.

                                                        J'utilisais juste :

                                                        <?php
                                                        
                                                        $connexion = mysql_pconnect (DB_HOST, DB_LOGIN, DB_PASS);
                                                        
                                                        if (!$connexion) {
                                                        	echo "Désolé, connexion au serveur de la base de donnée impossible !";
                                                        	exit;
                                                        }
                                                        
                                                        elseif (!mysql_select_db (DB_BDD, $connexion)) {
                                                        	echo "Désolé, accès à la base de donnée impossible !";
                                                        	exit;
                                                        }
                                                        
                                                        else {
                                                        	echo "Connexion à la base de donnée réussie avec succès";
                                                        }
                                                        
                                                        ?>
                                                        



                                                        Au lieu de :

                                                        <?php
                                                        try
                                                        {
                                                        	$bdd = new PDO('mysql:host=serveur_mysql;dbname=nom_bdd', 'login_bdd', 'mdp');
                                                        }
                                                        catch (Exception $e)
                                                        {
                                                                die('Erreur : ' . $e->getMessage());
                                                        }
                                                        ?>
                                                        


                                                        Qui lui ne marche toujours pas :s
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          24 avril 2010 à 18:42:19

                                                          Déjà, pour le code du dessus, connexion persistante bof bof... :-°

                                                          Sinon je pige pas trop là... D'après l'erreur tu essaye de te connecter par un socket, or ça n'a pas l'air d'être le cas... o_O


                                                          Il faudrait tester les 3 codes équivalent voir leur comportement...

                                                          <?php
                                                          $host = 'serveur';
                                                          $login = 'login';
                                                          $pass = 'pass';
                                                          $db = 'db';
                                                          $method = 'PDO'; // Autres valeurs test : 'OBJ' et 'PROC'
                                                          
                                                          try
                                                          {
                                                              switch($method)
                                                              {
                                                                  case 'PDO':
                                                                      $bdd = new PDO("mysql:host=$host;dbname=$db", $login, $pass, array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); // Par défaut PDO n'envoi pas d'exception mais des warnings...
                                                                  break;
                                                                  case 'OBJ':
                                                                  $bdd = new mysqli($host, $login, $pass, $db);
                                                                      if(mysqli_connecterrno())
                                                                      {
                                                                          throw new Exception(mysqli_connect_errno(), mysqli_connect_error());
                                                                      }
                                                                      break;
                                                                  case 'PROC':
                                                                      $bdd = mysql_connect($host, $login, $pass) or throw new Exception(mysql_errno(), mysql_error());
                                                                      mysql_select_db($db, $bdd) or throw new Exception(mysql_errno(), mysql_error());
                                                                      break;
                                                                  default:
                                                                      throw new Exception(0, 'Mode non-reconnu');
                                                              }
                                                          }
                                                          catch(Exception $e)
                                                          {
                                                              trigger_error(sprintf('<strong>Erreur MySQL n°%s en mode %s</strong><br />%s<br />', $e->getCode(), $method, $e->getMessage()), E_USER_ERROR);
                                                          }
                                                          echo "Connexion réussie en mode $method !";
                                                          


                                                          Sur ce petit script, la méthode PDO utilise le module PDO-MySQL, la méthode OBJ utilise MySQLi, et la méthode PROC utilise MySQL standard. ;)
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            24 avril 2010 à 19:09:04

                                                            Faudrait déjà arrêter de confondre drivers mysql pour PDO et extension mysql pour PHP
                                                            Ce sont 2 choses totalement différentes mais passons.

                                                            Et pour finir, il manque le port dans ta connexion PDO.

                                                            <?php
                                                            define('BDD_HOST', 'host');
                                                            define('BDD_PORT', '3306'); // Ne pas modifier cette ligne
                                                            define('BDD_USER', 'login');
                                                            define('BDD_PASS', 'password');
                                                            define('BDD_NAME', 'nom_base_de_donnee');
                                                            
                                                            try {
                                                            	$pdo = new PDO('mysql:host='.BDD_HOST.';port='.BDD_PORT.';dbname='.BDD_NAME, BDD_USER, BDD_PASS);
                                                            	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                                            	$pdo->query("SET NAMES 'utf8'"); // JEU DE CARACTERES UTILISE
                                                            	$pdo->query("SET lc_time_names = 'fr_FR'"); // LANGUE LOCALE
                                                            }
                                                            catch (PDOException $e) {
                                                            	echo 'Echec de la connexion : ',$e->getMessage();
                                                            }
                                                            
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            Connexion à la BDD avec PDO

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown