Sculderoy
-
Modifié par sculderoy le 27/03/2011 à 00:05
sculderoy
Messages postés78Date d'inscriptionsamedi 26 mars 2011StatutMembreDernière intervention24 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' ?