[php - sql] Qu'est-ce qu'une "resource" ?

Résolu/Fermé
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012 - Modifié par Une pattate qui vole le 25/05/2012 à 10:49
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012 - 25 mai 2012 à 14:17
Bonjour à toutes et à tous.

Dans l'absolu, je sais. Ce sont les paramètres donnés aux fonction comme "mysql_fetch_array", "mysql_fetch_assoc", etc.
Mais comment chacune de ces fonction définissent-elles les "resource" ?

Plus concrètement pourquoi "mysql_num_rows" considère
$info=$_POST['IDAdherant']; 
if($info == ""){ 
 $sql="SELECT * FROM adherant"; //60 
}else{ 
 $sql="SELECT * FROM adherant WHERE adherant.IDAdherant= '".$info."'"; 
}
comme une "resource" et pas
$info=$_POST['IdTypeMandat'];
if($info == "") //30
{
	include('index.php');
	exit();
}$sql1="SELECT IDAdherant FROM listemandat WHERE listemandat.IdTypeMandat = '$info'"; 
$sql2="SELECT NomMandat FROM nommandat WHERE IdTypeMandat = '$info'"; 
$chaine=""; 
$idreq=mysql_query($sql1); 
$id=mysql_fetch_array($idreq); 
$nommandat=mysql_fetch_assoc(mysql_query($sql2)); //40 
$n=0; 
do 
{ 
 if($n == 0) 
 { 
  $chaine.="IDAdherant = ".$id['IDAdherant']; 
  $n=1; 
 }else{ 
  $chaine.=" OR IDAdherant = ".$id['IDAdherant']; 
 } //50 
}while($id=mysql_fetch_array($idreq)); 
$sql="SELECT * FROM adherant WHERE ".$chaine;

Je vous remercie d'avance pour les réponses qui pourront m'être données.
A voir également:

3 réponses

Utilisateur anonyme
25 mai 2012 à 11:35
Bonjour

Attention, mysql_fetch_array et mysql_fetch_assoc ne définissent aucune resource.
C'est fonction en prennent une en paramètre, mais n'en définissent pas.
C'est mysql_query qui crée une resource (quand il n'y a pas de problème)

Je ne comprend pas ton "plus concrètement". Tu demandes :
pourquoi "mysql_num_rows" considère (bout de code) comme une resource et pas (autre bout de code)
Mais les bouts de code ne sont pas de resources.

Une resource, disons que c'est un objet un peu spécial dont la structure est cachée au programmeur. Il est créé par certaines fonctions pour être utilisé par d'autres.
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
25 mai 2012 à 12:02
Je me suis en effet mal exprimé, je m'en excuse. Ce que je demandais, c'est pourquoi "mysql_fetch_..." arrive à reconnaitre, une fois le mysql_query appliqué, la requete «$sql="SELECT * FROM adherant WHERE ".$chaine;» comme une resource et pas mysql_num_rows. Ce que je demande c'est donc : quelles sont les différences, autre que la valeur retourné, entre mysql_fetch_... et mysql_num_rows ?
0
Utilisateur anonyme
25 mai 2012 à 12:11
Si une variable est un resource qui vient d'un mysql_query ('SELECT..) alors mysql_fetch_..._ ET mysql_num_rows l'accepteront forcément tous les deux comme paramètre.

As-tu un exemple où tu vois une différence ? Dans celui que tu donnes au départ, il n'y a aucun mysql_num_rows.
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
25 mai 2012 à 13:32
mysql_num_rows n'apparait pas car il était dans une autre partie de mon programme. afin que mon programme fonctionne comme je le désirais, je l'ai un peu modifier. Je n'ai donc plus de problème, mais pour ma culture, j'aimerais quand même avoir le réponse à ma question.
Mon code d'origine était, à peu de chose près :
$info=$_POST['IdTypeMandat'];
if($info == "") //30
{
	include('index.php');
	exit();
}
$sql1="SELECT IDAdherant FROM listemandat WHERE listemandat.IdTypeMandat = '$info'"; 
$sql2="SELECT NomMandat FROM nommandat WHERE IdTypeMandat = '$info'"; 
$chaine=""; 
$idreq=mysql_query($sql1); 
$id=mysql_fetch_array($idreq); 
$nommandat=mysql_fetch_assoc(mysql_query($sql2)); //40 
$n=0; 
do 
{ 
	if($n == 0) 
	{ 
		$chaine.="IDAdherant = ".$id['IDAdherant']; 
		$n=1; 
	}else{ 
		 $chaine.=" OR IDAdherant = ".$id['IDAdherant']; 
	} //50 
}while($id=mysql_fetch_array($idreq)); 
$sql="SELECT * FROM adherant WHERE ".$chaine;

$req=mysql_query($sql);

if(mysql_num_rows($req) > 0)
{
	$element=mysql_fetch_array($req);
	do
	{
		.
		.
		.
	}while($element=mysql_fetch_array($req));
}

Sans le mysql_num_rows, le programme s'exécutait correctement, excepté dans le cas où mon $req était vide car il n'y avait pas d'élément avec les critère de ma close where.
Dès que je mettais le mysql_num_rows, il plantait en me disant «paramater 1 expected to be resource in mysql_num_rows».
0
Utilisateur anonyme
25 mai 2012 à 14:07
Comment voulais-tu qu'on comprenne ton problème avec mysql_num_rows dans un code où il n'y avait aucun mysql_num_rows ?
Maintenant, c'est évident : si $chaine est vide, tu as $sql="SELECT * FROM adherant WHERE " ce qui est une requête incorrecte : il ne faut pas le mot WHERE, ou si tu mets le mot WHERE, il faut une condition.
Comme la requête est incorrecte, mysql_query ne rend pas une resource mais un booleen.
Et si tu donnes un booleen à manger à mysql_num_rows, il n'est pas content ,il veut à tout prix une resource.

Tu dis que tu veux toujours une réponse à ta question, mais laquelle ? Tu as l'explication pour mysql_num_rows et la question Mais comment chacune de ces fonction définissent-elles les "resource" ? n'a pas de sens, puisque ces fonctions ne définissent pas de resource.
Quand à savoir précisément ce qu'est une resource, quel intérêt ? Je t'en ai déjà donné une petite idée plus haut (en tous cas celle que je m'en fais). L'essentiel est de réussir à s'en servir.
La curiosité n'est pas un défaut dans ce domaine, mais pourquoi ne demandes-tu pas en premier lieu comment marchent toutes les fonctions des bibliothèques PHP ? Tu t'en sers, un point c'est tout. Et si tu tiens absolument à tout savoir, tu peux toujours télécharger le code source de PHP et l' étudier ^^
0
Une pattate qui vole Messages postés 35 Date d'inscription mardi 22 mai 2012 Statut Membre Dernière intervention 13 juin 2012
25 mai 2012 à 14:17
Par moment j'ai vraiment du mal à analyser ce que j'écris ... Et dire que je fais des erreurs aussi stupides ...

Merci encore de aide ^^
Et au moins, la prochaine fois j'aurais besoin d'utiliser cette fonction, j'aurais moins de risque de faire l'erreur ^^
0