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 :

Deux requêtes identiques et résultats différents [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut Deux requêtes identiques et résultats différents
    Bonjour,

    ça fait maintenant 3h que je bloque sur un probleme sur une de mes pages PHP.

    l'objectif de ma page est de récuperer dans une colonne d'un fichier .csv un numero de téléphone et d'interroger une base MySQL pour savoir si elle detient ce numero.

    code pour récuperer dans mon fichier .csv:
    Code : 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
    $row=0;
    $tableau=array();
    $nomfichier="export.csv";
    $handle = fopen("./".$nomfichier, "r");
    while (($data = fgetcsv($handle, "100000", ";")) !== FALSE) 
    	{  
    	 $num = count($data); 	
     
    		 for ($c=0; $c < $num; $c++)
    		  {  			
     
    			switch($c)
    			{
    			case '17':$tableau[$row]=trim($data[$c]);   $row++;	break; // numero
     
    			}		
     
    		 }
     
     
    	}fclose($handle);
    Mon tableau $tableau detient alors la liste de tous les numéros présent dans la colonne 17 de export.csv.
    Si je parcours ce tableau avec un echo la liste est correcte. (pas d'espace en trop etc..).

    Maintenant interrogeons ma BDD:
    Code : 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
    mysql_connect("localhost", "root", ""); // Connexion à MySQL
    		mysql_select_db("bdd"); // Sélection de la base
    	for($g=1;$g<sizeof($tableau);$g++) //parcours du tableau
    	{
     
    		if($tableau[$g]!="") //petit controle
    		{
    		echo $tableau[$g]."-";
     
    		$requete="SELECT id_loc FROM annuaire WHERE numero='$tableau[$g]'";
    		echo $requete."-"; //affichage de ma requete pour debugage
    		echo mysql_num_rows(mysql_query($requete))."<br>";//nb de numero dans la bdd.
     
     
    		}
     
     
    	}
    mysql_close();
    Lorsque j'excute le script aucun numéro n'est trouvé dans la BDD ->mysql_num_rows=0.
    Cependant si je colle les mêmes requetes dans phpmyadmin j'ai bel et bien un resultat.


    Le plus surprenant c'est que lorsque je force le 0472524545 en amont de ma requete je trouve bien un resultat. $tableau[4]="0472524545";

    les requetes que ce soit en forcer ou en automatique sont exactement les même mais ne renvoie pas le meme resultat.

    les requetes sont en tout point identiques....

    SELECT id_loc FROM annuaire WHERE numero='0472524545' -->1
    SELECT id_loc FROM annuaire WHERE numero='0472524545' -->0

    Il n'y a même pas un espace de différence..
    En php il n'y a pas de type de variable pourtant? quelle est alors la difference entre mon alimentation en automatique et en manuel ?

    merci de votre aide,

  2. #2
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Tu as essayer d'afficher les erreurs ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $requete."-"; //affichage de ma requete pour debugage
    echo mysql_num_rows(mysql_query($requete))."<br>";//nb de numero dans la bdd.
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo $requete."-"; //affichage de ma requete pour debugage
    $res = mysql_query($requete) or die(mysql_error());
    echo mysql_num_rows($res)."<br>";//nb de numero dans la bdd.

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    aucune erreur s'affiche :-/

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Je ne vais peut-être pas résoudre ton problème, mais ton code n'est pas terrible.
    Met des apostrophes à la place des guillemets, l'exécution sera plus rapide car PHP analyse toutes les chaînes encadrées par des guillemets afin de voir s'il n'y a pas une expression à évaluer, ce qui n'est pas le cas dans ton code.
    Il y a un tas de lignes de code inutiles.

    Code pour récupérer le csv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
      $tableau = array();
      $nomfichier = 'export.csv';
      $handle = fopen('./' . $nomfichier, 'r');
      while (($data = fgetcsv($handle, 100000, ';')) !== FALSE) 
      {  
        //-- test si numéro est vide ----------------
        if (trim($data[17] != ''))
          $tableau[] = trim($data[17]);
      }
      fclose($handle);    
    ?>
    Code d'interrogation de la BDD :
    Code : 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
      mysql_connect('localhost', 'root', ''); // Connexion à MySQL
      mysql_select_db('bdd'); // Sélection de la base
     
      $nb = sizeof($tableau);
      $g = 0;
      while ($g < $nb) //parcours du tableau
      {
        echo $tableau[$g] . "-";
     
        $requete = 'SELECT id_loc 
                    FROM annuaire 
                    WHERE numero = \'' . $tableau[$g] . '\'';
        echo $requete . ' - '; //affichage de ma requete pour debugage
        echo mysql_num_rows(mysql_query($requete)) . '<br>';//nb de numero dans la bdd.
        $g ++;
      }
      mysql_close();
    ?>

  5. #5
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    et au lieu de faire echo de ta requete, essaie de faire un var_dump :
    Et colle nous un des resultats de cette commande

  6. #6
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    string(53) "SELECT id_loc FROM annuaire WHERE numero='0472444444'" [manuel]
    string(62) "SELECT id_loc FROM annuaire WHERE numero='0472444444'" [automatique]



    String(53) d'un coté String(62) de l'autre? c'est koi ca

  7. #7
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    il faut que tu regarde dans le code source html de la page reçue par ton navigateur. Ou alors, encarde tes traces de <pre> </pre> pour preserver les espaces.

  8. #8
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Par défaut
    En affichant le code source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string(53) "SELECT id_loc FROM annuaire WHERE numero='0477444444' -->manuel
    string(62) "SELECT id_loc FROM annuaire WHERE numero='0.4.7.7.4.4.4.4.4.4' -->automatique

    Le navigateur m'interprete de la même maniere donc visuellement j'ai la même chose...

    pourquoi ça me rajoute des points entre chaque chiffre??????????
    comment y remedier?
    c'est une histoire de formatage texte? (utf8 etc??)

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

Discussions similaires

  1. [AC-2003] Comparaison de deux requêtes identiques
    Par fouadodido dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/03/2013, 11h27
  2. Deux requêtes identiques - vraiment identiques?
    Par Douchka dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/07/2012, 15h03
  3. Une requête et 2 résultats différents
    Par user_oracle dans le forum SQL
    Réponses: 5
    Dernier message: 18/01/2010, 13h52
  4. Réponses: 11
    Dernier message: 30/08/2007, 22h35
  5. requête et état : résultats différents
    Par larpe dans le forum Access
    Réponses: 3
    Dernier message: 02/05/2006, 14h49

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