Parcours d'une table sur mysql

Résolu
baabs12 -  
 baabs12 -
Bonjour,
J'aimerai savoir comment peut on faire le parcours d'une table sur Mysql sans utiliser la fonction mysql_fetch_array?
Je programme avec PHP.

Merci d'avance
Configuration: Windows XP
Firefox 3.0.4

6 réponses

  1. Brydjy Messages postés 407 Statut Membre 28
     
    Pourquoi ne veux tu pas utiliser MySQL_fetch_array ?
    tu as 'MySQL_fetch_object' aussi.
    0
    1. baabs12
       
      Parce que j'ai une erreur du genre :

      Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP 2.0b1\www\bytesyss\applications\bo\objects\masks\dem_autor.php on line 257

      au fait c'est parce que je veux transferer des données d'une table se trouvant dans une base de Sql Server vers une autre table qui est sur Mysql
      0
      1. Brydjy Messages postés 407 Statut Membre 28 > baabs12
         
        Sur le lien fourni ci-dessous, tu trouveras probablement ta réponse.
        Un peu de lecture, il en faut.
        Aller bon courage.
        0
  2. Revan26914 Messages postés 1821 Statut Contributeur 320
     
    Bonjour,

    Il y aussi plein d'autres méthodes ==> http://www.manuelphp.com/php/function.mysql-fetch-array.php

    Cordialement

    Revan
    0
    1. Brydjy Messages postés 407 Statut Membre 28
       
      oui c'est vrai.
      0
    2. baabs12 > Brydjy Messages postés 407 Statut Membre
       
      Merci à vous deux. Sachez cependant que j'ai déjà appliqué toutes les méthodes de cette page. Effectivement depuis le weekend passé j'y travaille et j'ai tjrs le meme message d'erreur.
      Je pense que la solution est de faire une boucle pour parcourir la table, ce qui est dommage est que : je ne sais pas comment le faire et c'est ce que je demande.
      Encore une fois merci
      0
    3. Brydjy Messages postés 407 Statut Membre 28 > baabs12
       
      Pour faire une boucle ?
      Tu utilise 'WHILE'

      Tu veux afficher les résultats, Vérifier, comparer ?
      0
    4. baabs12 > Brydjy Messages postés 407 Statut Membre
       
      Je veux en étant sur Mysql me connecter sur une table de Sql server, y récupérer des données et les insérer dans une table qui est sur Mysql.
      Ci dessous la fonction que j'ai écrite:
      function transfert()
      {
      $myServer = "JOB";
      $myUser = "root";
      $myPass = "*****";
      $myDB = "pi";
      
      // connexion sur la base promo (sql server)
      $dbhandle = mssql_connect($myServer, $myUser, $myPass)
      or die("Connexion impossible sur le serveur $myServer");
      
      // selection de la base de données (sql server)
      $selected = mssql_select_db($myDB, $dbhandle)
      or die("Ouverture impossible de la base $myDB");
      
      echo "Vous etes bien connectes sur la base" . $myDB . " du" . $myServer . ".";
      
      //requête SQL pour extraire le montant sur sql server
      $reponse = mssql_query("SELECT * FROM F_DOCENTETE,F_CREGLEMENT WHERE F_DOCENTETE.CT_NumPayeur = F_CREGLEMENT.CT_NumPayeur");
      
      while ($donnees = mssql_fetch_array($reponse) )
      {
      
      $db_porteur =& P4A_DB::singleton();//(La table porteur se trouve sur mysql)
      $crit_porteur = $db_porteur->queryRow("SELECT * FROM porteur "); // Requête SQL
      
      
      // On fait une boucle pour lister tout ce que contient la table porteur (Mysql)
      
      while ($donneesporteur = mysql_fetch_array($crit_porteur) )
      {
      $nb_porteur = $donneesporteur['numero_compte1'];
      $val = $donnees['RG_Montant'] ;
      $num = $donnees['CG_Num'] ;
      
      if ($nb_porteur = $num)
      {
      $db_pt1 =& P4A_DB::singleton();
      $crit_pt1 = $db_pt1->queryRow("insert into testpromo (field4, field5) values ('$val', '$val')"); //(table testpromo sur Mysql)
      }
      }
      
      
      
      
      }
      
      // close the connection
      mssql_close($dbhandle);
      
      
      
      
      }
      
      
      
      
      




      Et ma connexion sur Mysql est faite comme suit:

      <?php
      
      /**
      
      */
      define("P4A_EXTENDED_ERRORS", true);
      define("P4A_DSN", 'mysql://root:*****@localhost:3306/bw');
      
      require_once( dirname(__FILE__) . '/../../p4a.php' );
      
      $app =& p4a::singleton("p4a_base_application");
      $app->main();
      
      ?>
      
      
      
      0
    5. Brydjy Messages postés 407 Statut Membre 28 > baabs12
       
      :)

      Bah étant donné que tu as l'air plus calé que moi.
      je vais attendre les réponses... avec toi.
      0
  3. Marco la baraque Messages postés 1030 Statut Contributeur 329
     
    Bonjour,

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP 2.0b1\www\bytesyss\applications\bo\objects\masks\dem_autor.p­hp on line 257

    Si tu as ce message d'erreur, c'est en général que ta requête ne s'est pas bien déroulée. Regarde du côté de mysql_errno() pour savoir ce qui s'est passé.
    Une fois que tu auras résolu ce problème, mysql_fetch_array() fonctionnera sans problème.

    Bien cordialement,
    0
  4. NothingAtALL Messages postés 26 Statut Membre 5
     
    Premierement.... il est préférable d'utiliser mysql_fetch_assoc plutot que mysql_fetch_array...!
    Je ne comprend toujours pas pourquoi il y a encore des gens qui utilise mysql_fetch_array, cette fonction crée un tableau deux fois plus gros! Utilisation d'espace inutile!

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP 2.0b1\www\bytesyss\applications\bo\objects\masks\dem_autor.p­­hp on line 257

    ce message d'erreur est effectivement en rapport avec une mauvaise exécution de ta requête!
    mais je voudrais corriger ce que Marco vient de te dire!
    Car tu utilises mssql et non mysql et mysql_errno ne te sera donc pas très utile!
    Il faut plutot utiliser mssql_get_last_message

    exemple
    mssql_query("SELECT * FROM table") or die(mssql_get_last_message());

    pour t'assurer que ta requete est bonne, je ne sais pas exactement quelle application tu utilises pour ta connexion a la bd -> comme PHPMyAdmin pour MySQL mais il y a habituellement un endroit que tu peux faire une requete directement sur la bd et ca sera plus facile de voir l'erreur!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. NothingAtALL Messages postés 26 Statut Membre 5
     
    je voulais dire mssql_fetch_assoc plutot que mysql_fetch_assoc et meme chose pour mysql_fetch_array dans le premier paragraphe!
    0
    1. Marco la baraque Messages postés 1030 Statut Contributeur 329
       
      Bonjour NothingAtALL,
      Baabs12 utilise à la fois une BD MySQL et une MsSql, donc le problème peut venir des deux BD.

      @Baabs12 :
      A mon avis le problème vient de la ligne suivante :
      $crit_porteur = $db_porteur->queryRow("SELECT * FROM porteur ");
      


      Après exécution, vérifie bien que $crit_porteur est de type resource (je ne sais pas dans quelle base queryRow s'exécute, donc utilise la fonction de vérification d'erreur qui va bien).

      EDIT : je voulais dire "vérifie bien que $crit_porteur est de type ARRAY", désolé

      Cordialement,
      0
    2. baabs12
       
      j'utilise la methode suivante pour la requete:
      $db_porteur =& P4A_DB::singleton();//(La table porteur se trouve sur mysql)
      $crit_porteur = $db_porteur->queryRow("SELECT * FROM porteur "); // Requête SQL
      echo $crit_porteur;
      


      et le résultat que j'ai est un "array".
      Et pour récupérer un champs dans la table je fais:

      
      $nb_porteur = $crit_porteur['numero_compte1'];
      


      ce qui me donne la valeur du champs "numero_compte1" dans la table porteur qui est sur Mysql
      0
    3. baabs12 > Marco la baraque Messages postés 1030 Statut Contributeur
       
      j'utilise queryRow() pour interroger la base Mysql car si j'utilise mysql_query, j'ai les message d'erreur suivants:

      Warning: mysql_query() [function.mysql-query]: Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in C:\Program Files\EasyPHP 2.0b1\www\bytesyss\applications\bo\objects\masks\dem_autor.php on line 264
      
      Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\Program Files\EasyPHP 2.0b1\www\bytesyss\applications\bo\objects\masks\dem_autor.php on line 264
      
      


      Le résultat avec queryRow est un array et non un resource
      0
    4. Marco la baraque Messages postés 1030 Statut Contributeur 329 > baabs12
       
      Bonjour,
      Peut-on connaître l'implémentation de queryRow()? C'est une méthode que tu as écrite? Que tu as trouvée où?

      Le plus simple à mon avis c'est de te créer l'utilisateur ODBC@localhost dans la table users afin d'avoir les droits en lecture : http://dev.mysql.com/doc/refman/5.0/fr/adding-users.html
      De cette manière tu pourras utiliser mysql_query puis mysql_fetch_array (apparemment le tableau retourné par queryRow n'est pas bien pris en compte par mysql_fetch_array, il doit manquer des informations dedans qui ne te sont pas importantes mais pour mysql_fetch_array si).

      Cordialement,
      0
    5. baabs12 > Marco la baraque Messages postés 1030 Statut Contributeur
       
      avec queryRow j'interroge la base mysql sans l'utilisateur ODBC.
      maintenat j'ai créer l'utilisateur ODBC et la fonction mysql_query. à ma grande surprise rien n'est affiché!


      
      $reponse = mysql_query("SELECT * FROM porteur ");
      		echo $reponse;
      
      0
  7. baabs12
     
    Chers tous,
    Je voudrai vous dire que mon code marche parfaitement maintenant. Je vous remercie encore une fois de l'aide que vous m'avez apporté et de tous les enseignements fournis pour parfaire ce code. Vive la solidarité!
    Je vous poste le code final qui marche actuellement.

    functionTransfert()
    	{
    	
    	
    		$myServer = "JOB";
    		$myUser = "root";
    		$myPass = "****";
    		$myDB = "pi";
    
    // connexion sur la base promo (sql server)
    		$dbhandle = mssql_connect($myServer, $myUser, $myPass)
        		or die("Connexion impossible sur le serveur $myServer");
    
    // selection de la base de données (sql server)
    		$selected = mssql_select_db($myDB, $dbhandle)
        		or die("Ouverture impossible de la base  $myDB");
    
    //requête SQL pour extraire le montant		
     		$reponse = mssql_query("SELECT * FROM F_DOCENTETE,F_CREGLEMENT WHERE F_DOCENTETE.CT_NumPayeur = F_CREGLEMENT.CT_NumPayeur");
    			
     		while ($donnees = mssql_fetch_array($reponse) )
    				{
    					$db_porteur =& P4A_DB::singleton();
    					$crit_porteur = mysql_query("SELECT * FROM porteur");// Requête SQL pour récupérer les données sur la table porteur
    					
    					
    					
    // On fait une boucle pour lister tout ce que contient la table porteur (Mysql)
    					while($donneesporteur = mysql_fetch_array($crit_porteur)) // mysql_fetch_array() marche. j'avais oublié de mettre $db_porteur =& P4A_DB::singleton() avant la requete.
    					{
    						$val = $donnees['RG_Montant'] ; // On met le montant dans $val
    	                   	$num = $donnees['CG_Num'] ; //On met le numéro du client dans $num
    						$date1 = $donnees['RG_Date']; // On met la date dans $date1
    						 					 
    						if ($nb_porteur = $num) //Si le numéro du client correspond au numéro du porteur
    							{
    				   		    	$db_pt1 =& P4A_DB::singleton();
    				    			$crit_pt1 = $db_pt1->queryRow("insert into testpromo (field4, field5, field7) values ('$val', '$val','$date1')"); //On insére dans la table transaction les données récupérées dans la base sari
    							}
    					
    					
    					}
    
    						
    				}
    
    // close the connection
    		mssql_close($dbhandle);
    
    	}
    
    
    
    0