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 :

différence de code produit avec les fonctions mysql et avec PDO [MySQL]


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 470
    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 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut différence de code produit avec les fonctions mysql et avec PDO
    Bonsoir,

    je compte rafraichir sérieusement un vieux code qui utilise les fonctions MySQL ; donc une de mes démarches est de tout passer en PDO. Par contre, il me faut bien comprendre ce vieux code. Je l'ai donc un peu arrangé pour interroger une bdd MySQL avec les fonctions MySQL ; surpris du résultat (différent de ce que me retourne phpmyadmin), j'ai fait l'équivalent en pdo et le résultat est différent (et cette fois, conforme à phpmyadmin) ; le code produit avec les fonctions MySQL n'est-il donc plus fiable ?

    code avec MySQL :
    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
      $query = "SELECT * FROM machines ORDER BY name";
      $result = mysql_query($query) or die ("Impossible d'exécuter la requete d'effacement.");      
      $num_rows = mysql_num_rows($result) or die ("Unable To Retrieve The Number Of Rows !");
      if ($num_rows == 0) {
        echo "No Machine found !<br>";
        exit;
      }
      for ($i=0;$i<$num_rows;$i++)
      {
        $row = mysql_fetch_array($result);	
        $m1[$i] = $row["name"];
        $m2[$i] = $row["id"];
        echo "<br/>name=". $m1[$i]." / id=".$m2[$i];
      }
    ?>

    code en pdo :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // exécuter un select puis afficher les lignes
    $sql = "SELECT * FROM machines ORDER BY name";
    $qid = $bdd->query($sql);
     
    while( $ligne=$qid->fetch(PDO::FETCH_OBJ) ) {
    	echo "name : ".$ligne->name."  id : ".$ligne->id." <br/>";
    }
      0  0

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    On doit deviner nous même la différence ?
      0  0

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    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 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Oui ! En fait. Presque tous les ID sont différents et mysql retourne aussi des names qui n'existent pas dans la bdd...
      0  0

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour Laurent,
    Citation Envoyé par laurentSc Voir le message
    je compte rafraichir sérieusement un vieux code qui utilise les fonctions MySQL ;
    Depuis le temps, on va finir par le savoir...
    Je l'ai donc un peu arrangé pour interroger une bdd MySQL avec les fonctions MySQL ;
    Montre-nous plutôt le code AVANT que TU ne le BIDOUILLES !!


    Cela dit, OUI, je vois des différences :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	echo "<br/>name=". $m1[$i]." / id=".$m2[$i];
     
    	echo "name : ".$ligne->name."  id : ".$ligne->id." <br/>";
    • Il manque un slash,
    • il y a des : à la place des =
    • et le <br/> n'est pas au même endroit
    Dernière modification par Invité ; 02/09/2015 à 09h44.
      0  0

  5. #5
    Invité
    Invité(e)
    Par défaut
    CONSEIL :
    Au lieu d'essayer de comprendre et tester un code FAUX et OBSOLETE
    Essaie plutôt de COMPRENDRE A QUOI il sert (objectif, résultat à atteindre), et écrit un CODE CORRECT !!



    En l'occurence ici : "Afficher le name et id".

    Ton code PDO fonctionne et donne le bon résultat ?
    SUPER !! Reste-en là... et PASSE A LA SUITE !!
      0  0

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    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 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Montre-nous plutôt le code AVANT que TU ne le BIDOUILLES !!
    Le code en MySQL que j'ai mis dans mon post #1 est non bidouillé (sauf la ligne 15, qui ne modifie rien).

    Par contre, je donne en plus les 2 codes de connexion à la bdd :
    - connexion MySQL :
    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="support_eis";
    		$auth=false;
    		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 PDO :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    include_once (dirname(__DIR__).'\\eis\new\MyPdo.php');
    //// connexion
    try{
    				$bdd = new MyPdo("su_dev_eis");
      }
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}		
    ?>

    et MyPdo.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    include("class_MyPdo.php");
    ?>

    et class_MyPdo.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
    <?php
    class MyPdo extends PDO {
     
    	protected $DB_NAME;
     
    	protected $HOST = "localhost";
     
    	protected $USER ="root";
     
    	protected $PASS ="root";
     
     
    	function __construct($db_name) {	
    	$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
     
    	$this->DB_NAME = $db_name;
    	parent::__construct('mysql:host=' . $this->HOST . ';dbname=' . $this->DB_NAME,$this->USER,$this->PASS,$pdo_options);
     
    	}
     
    }
    ?>
    L'authentification change aussi d'où le changement de $USER et de $PASS, mais on se connecte bien à la même bdd.


    Citation Envoyé par jreaux62 Voir le message



    Cela dit, OUI, je vois des différences :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	echo "<br/>name=". $m1[$i]." / id=".$m2[$i];
     
    	echo "name : ".$ligne->name."  id : ".$ligne->id." <br/>";
    • Il manque un slash,
    • il y a des : à la place des =
    • et le <br/> n'est pas au même endroit
    Excellent sens de l'observation

    Citation Envoyé par jreaux62 Voir le message
    CONSEIL :
    Au lieu d'essayer de comprendre et tester un code FAUX et OBSOLETE
    Essaie plutôt de COMPRENDRE A QUOI il sert (objectif, résultat à atteindre), et écrit un CODE CORRECT !!
    C'est ce que j'ai commencé par faire, mais comme mon code ne donnait pas les résultats attendus, j'essaie de cette façon-là de comprendre ce qui cloche.

    Citation Envoyé par jreaux62 Voir le message
    En l'occurence ici : "Afficher le name et id".

    Ton code PDO fonctionne et donne le bon résultat ?
    SUPER !! Reste-en là... et PASSE A LA SUITE !!
    Cette partie du code fonctionne mais c'est une autre (plus complexe) qui ne fonctionne pas.
      0  0

  7. #7
    Invité
    Invité(e)
    Par défaut
    Laurent,

    Donne tes fichiers à convertir à UN PROFESSIONNEL, et n'en parlons plus...
      0  0

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    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 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Si justement, on en parlera jusqu'à ce que ça marche...(je finirai bien par trouver)
      0  1

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je vais probablement dire une bêtise mais... Connexion mysql : $dbase="support_eis"; et connexion PDO : $bdd = new MyPdo("su_dev_eis");. C'est moi ou ce sont deux bases différentes ?
      1  0

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    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 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Celui qui a fait une bêtise, ce n'est pas toi, mais moi, car je n'ai pas copié le code de la connexion au bon endroit...(la version MySQL est une version de production alors que la version pdo est une version de développement...)
      0  0

  11. #11
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    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 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Si justement, on en parlera jusqu'à ce que ça marche...(je finirai bien par trouver)
    Désolé si ça ne plaît pas, mais j'ai une qualité (persévérant) et un défaut (têtu comme une mule)
      0  0

  12. #12
    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 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    et mysql retourne aussi des names qui n'existent pas dans la bdd...
    Ca, je ne vois pas trop comment c'est possible !
    Ce qui est probable, c'est que ta boucle fasse des trucs bizarres.
    Remplace ton code par cela


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
      $query = "SELECT * FROM machines ORDER BY name";
      $result = mysql_query($query) or die ("ERREUR");      
      $num_rows = mysql_num_rows($result) or die ("ERREUR");
      if ($num_rows == 0) {
        echo "No Machine found !<br>";
      }
      else{
         while($row=mysql_fetch_assoc($result)){
            echo '<pre>';
            print_r($row);
            echo '</pre>';
        }	
    }
      0  0

  13. #13
    Invité
    Invité(e)
    Par défaut
    Tu confonds "persévérant" et "borné".

    Toi, tu es du genre à te cogner la tête durant des heures dans un mur...
    ...sans voir qu'il y a une porte à 1 mètre de toi.



    Dans une autre discussion, je t'ai conseillé d'avoir de la jugeote.
    Il s'agit là de savoir prendre du recul pour voir une situation dans son ensemble, afin d'avoir un jugement correct.

    Toi, au moindre grain de sable dans ta tong, tu ouvres une discussion sur le forum.


    Ton code PDO fonctionne et donne le bon résultat.
    Le problème est réglé.
    POINT BARRE.

    Je clos cette discussion, qui n'en est plus une et mobilise inutilement plusieurs personnes.
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/10/2007, 06h44
  2. problème avec les fonctions MidStr et LeftStr
    Par timsah dans le forum C++Builder
    Réponses: 1
    Dernier message: 07/02/2006, 10h07
  3. Réponses: 2
    Dernier message: 10/05/2005, 10h58
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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