[Résolu][PHP] Problème avec mysql_fetch_assoc

Résolu/Fermé
Sculderoy - Modifié par sculderoy le 27/03/2011 à 00:05
sculderoy Messages postés 78 Date d'inscription samedi 26 mars 2011 Statut Membre Dernière intervention 24 septembre 2018 - 27 mars 2011 à 00:04
Bonsoir les codeurs fous ! =D

Comme vous vous en doutez si je viens ici c'est que j'ai un petit problème...

En effet une belle erreur s'est confortablement installée dans mon application et est bien résolue à y rester.

Voilà l'erreur (plutôt commune en somme) :
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\[...]

J'ai tout d'abord pensé à une erreur dans ma requête SQL :
SELECT * FROM actualite WHERE ordre > 3 ORDER BY ordre ASC LIMIT 1

Mais cette dernière fonctionne parfaitement en "requêtage direct" dans phpMyAdmin.

Bon... Passant par des fonctions maisons de requêtage, je me suis tourné vers ces dernières pour voir si quelques chose clochait... Le "problème" c'est que ces fonctions maisons (qui font appel aux fonctions PHP) fonctionne avec toutes les autres requêtes...

Petit foufou que je suis, j'ai essayé de dumper mon query (ça fait toujours bizarre d'écrire ça) et là... stupeur ! Aucune ressource n'est allouée à ladite requête resistante... Du coup je comprend pourquoi ça ne marche pas, mais je ne sais pas comment résoudre ça... Ci-après un bout de code pour que vous voyez mes fonctions maison et mes appels.

<?PHP    

/*    
* En gros cette lib me permet de requêter sans faire de SQL    
*/    

// Cette fonction permet de faire un SELECT    
function db_get($table, $where=null, $order=null, $limit=null){    
        $sql  = 'SELECT * FROM '.$table;    
        if(!is_null($where)){$sql .= ' WHERE '.db_escapeHTML($where);}    
        if(!is_null($order)){$sql .= ' ORDER BY '.db_escapeHTML($order);}    
        if(!is_null($limit)){$sql .= ' LIMIT '.db_escapeHTML($limit);}    
        print $sql.'<br />';    
        $resultat = db_result($sql);    
        if(count($resultat)==1){    
            return $resultat[0];    
        }    
        return $resultat;    
    }    

    // Retourne un tableau associatif d'une requete sinon retourne faux    
    function db_result($sql){    
        $query = db_query($sql);    
        $result=array();    
        while($fetch=db_fetch($query)){    
            $result[]=$fetch;    
        }    
        if(array_count($result)>0){    
            return $result;    
        }    
        return false;    
    }    

    // Retourne le query d'une requete    
    function db_query($sql){    
        // C'est ici qu'on voit bien qu'aucune ressource n'est créée  
        print mysql_query($sql).'<br />';    
        return mysql_query($sql);    
    }    

    // Retourne le tableau de résultat    
    function db_fetch($query){    
        return mysql_fetch_assoc($query);    
    }    

// Ceci retourne un resultat    
var_dump(db_result('SELECT * FROM actualite WHERE ordre > 3 ORDER BY ordre ASC LIMIT 1'));    
// Ceci me retourne une erreur (les variables sont bien entendu déclarée plus haut avec les mêmes valeurs)    
var_dump(db_get('actualite', $where, $order, $limit));    
?>    


En testant un peu plus profondément, je viens de m'apercevoir qu'en mettant $where = 'ordre = 3' ça fonctionne... Viendrait-ce de ce $where = 'ordre > 3' ?

Si quelqu'un a une idée...

1 réponse

sculderoy Messages postés 78 Date d'inscription samedi 26 mars 2011 Statut Membre Dernière intervention 24 septembre 2018 15
Modifié par sculderoy le 27/03/2011 à 00:21
Le problème venait de mon db_escapeHTML() qui changeait mes < et > par les entités HTML... enfin bref, tout semble marcher =)
1