Warning: mysql_fetch_array():

meskina Messages postés 52 Statut Membre -  
meskina Messages postés 52 Statut Membre -
Bonjour,

J'ai une erreur avec laquelle j'essayé beaucoup de solution,mais à veine !
c'est: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/gec/public_html/site/exlNonviM.php on line 101
la requete ça marche trs bien sur phpmyadmin,elle m'affiche les résultats.donc surement le problème est au niveau du PHP,mais j'ai pas trouvé
merci de voir mon code et m 'aider si vous pouvez et merci d'avance!
<?php 

        $q=mysql_query('SELECT * FROM avisiter WHERE pharam_id  NOT IN (SELECT pharam_id FROM listevisite )') or die(mysql_error()); 
while($d=mysql_fetch_array($q)){         //101 
 echo' <tr> 
   <td style="color:#4e7eeb;font-size:12">'.$d['pharam_id'].'</td> 
    <td style="color:#4e7eeb;font-size:12">'.$d['nomm'].'</td> 
    <td style="color:#4e7eeb;font-size:12">'.$d['liste'].'</td> 
        <td style="color:#4e7eeb;font-size:12">'.$d['region'].'</td> 
        <td style="color:#4e7eeb;font-size:12">'.$d['ville'].'</td> 
        <td style="color:#4e7eeb;font-size:12">'.$d['secteur'].'</td> 
  </tr>'; 

}  

ob_end_flush(); 
?> 

19 réponses

Utilisateur anonyme
 
essaies avec mysql_fetch_assoc à la place de mysql_fetch_array
0
Utilisateur anonyme
 
Bonjour

mysql_fetch_assoc ou mysql_fetch_array, je ne vois pas ce que ça peut y changer, puisque c'est $q qui est incorrect d'après le message d'erreur.
Avec le or die(mysql_error()) qui précède, tu ne peux normalement pas avoir ce message d'erreur.
Comment as-tu fait ta connexion au serveur mysql ? Avec mysql_connect, ou avec PDO ?
0
meskina Messages postés 52 Statut Membre
 
j'utilise dans le fichier de connexion mysql_connect
et j'appel avec include,
0
Utilisateur anonyme
 
J'avoue réponse bête :p
0
Utilisateur anonyme
 
Très bizarre que tu aies ce message sans que die(mysql_error()) ne signale rien...
Pour diagnostic, peux-tu insérer une ligne :
        $q=mysql_query('SELECT * FROM avisiter WHERE pharam_id  NOT IN (SELECT pharam_id FROM listevisite )') or die(mysql_error()); 
print_r($q);
while($d=mysql_fetch_array($q)){    

Et dire ce que ça affiche ?
0

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

Posez votre question
meskina Messages postés 52 Statut Membre
 
désolé pour le retard,mais j'ai des sérieux problèmes de zone de cnx..
merci pour ta suivie,alors l'affichage me donne :
1
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/gec/public_html/site/exlNonviM.php on line 102

Une remarque très importante,c'est que quand j'ai gardé que quelques données dans les deux tables et j'ai essayé en local,l'affichage est correcte sans warning,mais sur le serveur et vaec une Bd chargée ,ça donne le warning,sachant que si j'applique la requete sur phpmyadmin directement elle prends un peu du temps et affiche correctement..alors ?
perdue :(
0
meskina Messages postés 52 Statut Membre
 
sinon j'ai trouvé que peut être il faut utiliser les index à mes deux tables pour optimiser la requete,j'ai trouvé sur le manuel l'explication mais je sais pas comment appliquer sur mon exemple!?
0
Gornarf Messages postés 126 Statut Membre 3
 
SELECT pharam_id FROM listevisite renvoi un résultat?

tu peux toujours checker si un résultat est retourné en ne pas executer tes requestes

ex:
$rows=mysql_num_rows($q)
echo $rows; // Permet de retourné le nombre de résultat présent dans ta requete
if ($rows!=0) {

while($d=mysql_fetch_array($q)){         //101 
 echo' <tr> 
   <td style="color:#4e7eeb;font-size:12">'.$d['pharam_id'].'</td> 
    <td style="color:#4e7eeb;font-size:12">'.$d['nomm'].'</td> 
    <td style="color:#4e7eeb;font-size:12">'.$d['liste'].'</td> 
        <td style="color:#4e7eeb;font-size:12">'.$d['region'].'</td> 
        <td style="color:#4e7eeb;font-size:12">'.$d['ville'].'</td> 
        <td style="color:#4e7eeb;font-size:12">'.$d['secteur'].'</td> 
  </tr>'; 
}  
}
else //test si le traitement se fait jusque la
{
echo 'aucun résultat retourné';
}
0
Utilisateur anonyme
 
Je ne vois pas d'erreur de syntaxe dans ta requête. Mysql non plus apparemment, puisque le le or die.. du mysql_query n'affiche pas d'erreur.
Pourtant, le résultat du mysql est incorrect : le print_r($q); aurait dû t'afficher Resource id #qqchose et pas simplement 1.

Peux-tu donner tout le code de la page jusqu'à la ligne 110 (en cachant les mots de passe évidemment) ?
0
meskina Messages postés 52 Statut Membre
 
Meerci à vos réponses,alors voilà le code de toute la page,(sinon avez vous lu mon dernier statut des index..car si les tables sont légères j'ai les résultats sinon j'ai rien!?)
<?php
ob_start();
include('connexion.php');
//Pour exporter les résultats dans un fichier Excel
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=Non_Visites.xls");

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>

<script language="javascript">
function edition()
{
options = "Width=950%,Height=900%" scroll=true ;
window.open( "edition_listes.php", "edition", options ) ;
}
</script>

<style type="text/css">

.ds_box {
background-color: #FFF;
border: 1px solid #000;
position: absolute;
z-index: 32767;
}

.ds_tbl {
background-color: #FFF;
}

.ds_head {
background-color: #333;
color: #FFF;
font-family: Arial, Helvetica, sans-serif;
font-size: 13px;
font-weight: bold;
text-align: center;
letter-spacing: 2px;
}

.ds_subhead {
background-color: #CCC;
color: #000;
font-size: 12px;
font-weight: bold;
text-align: center;
font-family: Arial, Helvetica, sans-serif;
width: 32px;
}

.ds_cell {
background-color: #EEE;
color: #000;
font-size: 13px;
text-align: center;
font-family: Arial, Helvetica, sans-serif;
padding: 5px;
cursor: pointer;
}

.ds_cell:hover {
background-color: #F3F3F3;
} /* This hover code won't work for IE */
.style6 {color: #0066FF}
.style7 {color: #4e7eeb}
.style8 {color: #000033}
.style9 {font-size: 10px}
.style10 {font-weight: bold}
.style11 {color: #000000}
</style>

</head>

<body>

<form name="form2" id="form2">
<div align="left" class="style10">
<p align="left" class="style19"><font color="green" ></span><span class="style7"><strong>Médecins Non visités </strong></span></p>
</div>
</form>
<table width="87%" height="30" border="1" cellspacing="0" bgcolor="#ffffff">
<tr>
<th width="174" bgcolor="#FFFFCC" class="style13 style7 style9">Medecin</th>
<th width="140" bgcolor="#FFFFCC"><span class="style13 style7 style9">Representant </span></th>
<th width="89" bgcolor="#FFFFCC" class="style13 style7 style9">Liste</th>
<th width="141" bgcolor="#FFFFCC" class="style13 style7 style9">Region</th>
<th width="117" bgcolor="#FFFFCC" class="style13 style7 style9">Ville</th>
<th width="99" bgcolor="#FFFFCC" class="style13 style7 style9">Secteur</th>

</tr>
<?php
$q= mysql_query(" SELECT * FROM avisiter av WHERE
NOT EXISTS ( SELECT (id_listevisite) FROM listevisite lv WHERE av.pharam_id = lv.pharam_id ) ");

print_r($q);
while($d=mysql_fetch_assoc($q)){
echo' <tr>
<td style="color:#4e7eeb;font-size:12">'.$d['nom'].'</td>
<td style="color:#4e7eeb;font-size:12">'.$d['nomm'].'</td>
<td style="color:#4e7eeb;font-size:12">'.$d['liste'].'</td>
<td style="color:#4e7eeb;font-size:12">'.$d['region'].'</td>
<td style="color:#4e7eeb;font-size:12">'.$d['ville'].'</td>
<td style="color:#4e7eeb;font-size:12">'.$d['secteur'].'</td>

</tr>';

}

ob_end_flush();
?>
</table>

</body>
</html>
0
Gornarf Messages postés 126 Statut Membre 3
 
width: 950% Ooooooo
0
Utilisateur anonyme
 
Où est le or die(mysql_error()) ?
0
Utilisateur anonyme
 
Et pourquoi ces headers fantaisistes alors que tu génères du html tout simple ? Mais c'est un autre problème, avec ton javascript incorrect.
[edit] Je retire ce que j'ai écrit pour les headers fantaisistes, je viens de faire l'essai. Je n'aurais jamais cru qu'on pouvait donner à Excel du html pur et dur.
Par contre il y a quand même un problème de javascript.
0
meskina Messages postés 52 Statut Membre
 
comme j'ai indiqué le problème est fortement probable de lla part des tables trop chargés..comment faire pour ajouter les index à ma requete ?
0
Utilisateur anonyme
 
Ce n'est pas à la requête, mais aux tables qu'il faut ajouter des index.
Puisque tu fais une comparaison av.pharam_id = lv.pharam_id, il faut ajouter un index sur le champ pharam_id sur les deux tables. Ça se fait facilement avec phpmyadmin, mais si tes tables sont volumineuses, la création d'index peut prendre un moment.
0
meskina Messages postés 52 Statut Membre
 
oui,j'ai ajouté CREATE UNIQUE INDEX PharamAVISI_IDX1 ON avisiter(pharam_id) à la table avisiter
et CREATE UNIQUE INDEX PharamLISTVI_IDX1 ON listevisite(pharam_id) à la table listevisite
Mais dans la requête,il faut normalement ajouter ces index non ?
alors j'ai fait : SELECT *
FROM avisiter av
WHERE NOT EXISTS (SELECT (id_listevisite)
FROM listevisite lv
WHERE lv.PharamAVISI_IDX1 = av.PharamAVISI_IDX1) ;
mais ça donne erreur de : #1054 - Unknown column 'lv.PharamAVISI_IDX1' in 'where clause'
0
Utilisateur anonyme
 
Je ne suis pas spécialiste SQL, mais il me semble bien que ce sont les champs qu'il faut indiquer et non pas les index. MySQL utilise les index s'il les juge appropriés.
Pour vérifier s'il s'en sert, utilise une commande EXPLAIN : https://dev.mysql.com/doc/refman/8.0/en/verifying-index-usage.html
0
meskina Messages postés 52 Statut Membre
 
hmmm quand j'ai essayé d'indexé les tables,ça me donne l'erreur:
1062 - Duplicate entry '3135' for key 'PharamLISTVI_IDX1'
??
0
Utilisateur anonyme
 
Et qu'est-ce que tu ne comprends pas à ce message ? Visiblement, tu essayes de définir une clé unique alors que tu as deux fois la même valeur. À toi de savoir si pharam_id peut ou non apparaître deux fois dans ta table. Si c'est possible, tu n'as pas à définir un index UNIQUE et si ce n'est as possible, il faut corriger tes données.
Il y a une chose que moi je ne comprends pas. C'est qu'à ton message #16, tu disais que tu avais créé ces index, et maintenant tu me dis qu'il y a une erreur en les créant. Alors ?
0
meskina Messages postés 52 Statut Membre
 
oui car au début je les crées sur la base en local(qui a pas des doublons) mais sur la Db réelle il y on a des doublons pour pharam_id :)
Donc,pour ces doublons dans le champs pharam_id je peux pas les enlever car ça fait parti des données.
alors puisque c'est le cas tu qu'est ce que tu me propose come solution ?
merci d'avance pour votre suivie
0
meskina Messages postés 52 Statut Membre
 
yuppiiii!ça marche maintenant!
alors v oilà mon problème était justement dans l'optimisation de la table,j'ai utilisé les index sur les tables,maintenant ça marche bien
merci bcp min père :p
0