Parcours d'une table sur mysql

Résolu/Fermé
baabs12 - 11 déc. 2008 à 11:13
 baabs12 - 12 déc. 2008 à 12:47
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
A voir également:

6 réponses

Brydjy Messages postés 399 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 8 novembre 2013 28
11 déc. 2008 à 11:16
Pourquoi ne veux tu pas utiliser MySQL_fetch_array ?
tu as 'MySQL_fetch_object' aussi.
0
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
Brydjy Messages postés 399 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 8 novembre 2013 28 > baabs12
11 déc. 2008 à 11:26
Sur le lien fourni ci-dessous, tu trouveras probablement ta réponse.
Un peu de lecture, il en faut.
Aller bon courage.
0
Revan26914 Messages postés 1778 Date d'inscription dimanche 14 octobre 2007 Statut Contributeur Dernière intervention 15 octobre 2019 320
11 déc. 2008 à 11:18
Bonjour,

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



Cordialement

Revan
0
Brydjy Messages postés 399 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 8 novembre 2013 28
11 déc. 2008 à 11:20
oui c'est vrai.
0
baabs12 > Brydjy Messages postés 399 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 8 novembre 2013
11 déc. 2008 à 11:31
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
Brydjy Messages postés 399 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 8 novembre 2013 28 > baabs12
11 déc. 2008 à 11:33
Pour faire une boucle ?
Tu utilise 'WHILE'

Tu veux afficher les résultats, Vérifier, comparer ?
0
baabs12 > Brydjy Messages postés 399 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 8 novembre 2013
11 déc. 2008 à 11:37
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
Brydjy Messages postés 399 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 8 novembre 2013 28 > baabs12
11 déc. 2008 à 11:40
:)

Bah étant donné que tu as l'air plus calé que moi.
je vais attendre les réponses... avec toi.
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
11 déc. 2008 à 11:40
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
NothingAtALL Messages postés 26 Date d'inscription mercredi 10 décembre 2008 Statut Membre Dernière intervention 2 mai 2010 5
11 déc. 2008 à 11:58
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NothingAtALL Messages postés 26 Date d'inscription mercredi 10 décembre 2008 Statut Membre Dernière intervention 2 mai 2010 5
11 déc. 2008 à 11:59
je voulais dire mssql_fetch_assoc plutot que mysql_fetch_assoc et meme chose pour mysql_fetch_array dans le premier paragraphe!
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
11 déc. 2008 à 12:10
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
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
baabs12 > Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009
11 déc. 2008 à 12:23
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
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328 > baabs12
11 déc. 2008 à 12:52
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
baabs12 > Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009
11 déc. 2008 à 13:34
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
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