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

Langage PHP Discussion :

connexion qui marche en mysql_xx et pas en pdo


Sujet :

Langage PHP

  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 connexion qui marche en mysql_xx et pas en pdo
    Bonjour,

    conscient qu'il est grand temps de passer des fonctions mysql_xxx à PDO, je veux le faire, mais je tombe sur un souci : la connexion à la base ne marche plus !

    Connexion avec mysql_xxx :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            $entered_user = $_SERVER["PHP_AUTH_USER"];
    	$entered_pass = $_SERVER["PHP_AUTH_PW"];
     
    	if (isset($entered_user) && isset($entered_pass)) {
                    $dbase="su_dev_eis";
    		mysql_connect("localhost",$entered_user,$entered_pass) or die ("Connexion impossible sur le serveur MySQL");
                    mysql_select_db($dbase) or die ("Sélection de la base SQL impossible");
                    ...

    Connexion avec PDO :
    définition de la classe :
    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
    27
    <?php
    error_reporting(E_ALL);
    ini_set('display_errors','1'); 
    // MyPDO
     //la classe MyPdo hérite de la classe PDO (extends)
    class MyPdo extends PDO {
     
    	static public $DB_NAME = "su_dev_eis";
     
    	static public $HOST = "localhost";
     
     
    // le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres	
    	function __construct() {
    	$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
     
    	parent::__construct('mysql:host=' . MyPdo::$HOST . ';dbname=' . MyPdo::$DB_NAME, $_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"], $pdo_options);
     
     
    	}
     
    }
    // fin MyPDO
    ?>

    utilisation de la classe (donc connexion) :
    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
    <?php
    header('Content-type: text/html; charset=UTF-8');
    //// connexion
    include 'MyPdo.php';
     
    try{
    				$bdd = new MyPDO();
    				// exécuter un select puis afficher les lignes
    				$sql='select * from `user` order by name';
    				$qid = $bdd->prepare($sql);
    				$qid->execute();
    				while( $ligne=$qid->fetch(PDO::FETCH_OBJ) )
    					echo "name : $ligne->name  firstname : $ligne->firstname <br/>";
    				$bdd=NULL;
    			}
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    			}
    ?>
    et au lieu de passer dans le try, on passe dans le catch.

    arggggggggggggggSQLSTATE[42S02]: Base table or view not found: 1146 Table 'su_dev_eis.user' doesn't exist
    Pourquoi ?

  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 essayé de faire un test plus simple qu'avec une extension de classe ?
    Le premier debugage c'est de circonscrire son problème.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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
    Connaissant mal PDO, je m'étais servi d'un code déjà éprouvé ailleurs, mais pour faire plus simple, j'ai repris un code de DVP :
    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
    <?php
    header('Content-type: text/html; charset=UTF-8');
     
    try{
    				include "connect.php";
    				// exécuter un select puis afficher les lignes
    				$sql='select * from `user` order by name';
    				$qid = $bdd->prepare($sql);
    				$qid->execute();
    				while( $ligne=$qid->fetch(PDO::FETCH_OBJ) )
    					echo "name : $ligne->name  firstname : $ligne->firstname <br/>";
    				$bdd=NULL;
    			}
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    			}
    ?>

    avec connect.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
    <?php
    error_reporting(E_ALL^E_NOTICE);
    ini_set('display_errors','1'); 
    // MyPDO
    try {
        $DB_NAME = "su_dev_eis";
        $strConnection = 'mysql:host=localhost;dbname='.$DB_NAME; //Ligne 1
        $arrExtraParam= array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); //Ligne 2
        $bdd = new PDO($connStr, "root", "", $arrExtraParam); //Ligne 3; Instancie la connexion
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//Ligne 4
    }
    catch(PDOException $e) {
        $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
        die($msg);
    }
    ?>

    et
    ERREUR PDO dans C:\wamp\www\devjupiter\connect.php L.9 : invalid data source name
    ???

  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 mis $strConnection en ligne 7 et $connStr en ligne 9.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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
    En effet, j'ai fait un copier-coller sans faire attention...Maintenant, ça va plus loin, mais ça coince un peu après...

    connect.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
    <?php
     error_reporting(E_ALL^E_NOTICE);
     ini_set('display_errors','1'); 
     // MyPDO
     try {
         $DB_NAME = "su_dev_eis";
         $strConnection = 'mysql:host=localhost;dbname='.$DB_NAME; //Ligne 1
         $arrExtraParam= array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); //Ligne 2
         $bdd = new PDO($strConnection, "root", "", $arrExtraParam); //Ligne 3; Instancie la connexion
         $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//Ligne 4
         echo "connexion OK<br/>";
     }
     catch(PDOException $e) {
         $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
         die($msg);
     }
     
    ?>

    et testpdo.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
    <?php
     header('Content-type: text/html; charset=UTF-8');
     
    try{
      include "connect.php";
      // exécuter un select puis afficher les lignes
      $sql='select * from `user` order by name';
      $qid = $bdd->prepare($sql);
      $qid->execute();
      while( $ligne=$qid->fetch(PDO::FETCH_OBJ) )
       echo "name : $ligne->name  firstname : $ligne->firstname <br/>";
      $bdd=NULL;
     }
     catch(PDOException $e){
      echo "argggggggggggggg".$e->getMessage();
     }
     ?>

    donne :
    connexion OK
    arggggggggggggggSQLSTATE[42S02]: Base table or view not found: 1146 La table 'su_dev_eis.user' n'existe pas
    Ca vient d'où ce message d'erreur ?

  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
    Que cette table n'existe vraiment pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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
    En plus, c'est vrai...Il manquait un s...Comme c'était le message d'erreur initial, j'ai remis mon extension de classe et...ça marche

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

Discussions similaires

  1. [11g] Connexion qui marche sans service name mais pas avec @XE
    Par Antoun dans le forum Connexions aux bases de données
    Réponses: 7
    Dernier message: 22/01/2014, 23h39
  2. Fonction qui marche sous FF mais pas IE
    Par Oluha dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/01/2006, 14h07
  3. Pb sur une fct qui marche sous mozilla mais pas ie
    Par chpog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/09/2005, 11h26
  4. Réponses: 2
    Dernier message: 06/06/2005, 15h13
  5. Réponses: 2
    Dernier message: 04/06/2004, 11h11

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