Mysql_fetch_array() problème si vide

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,


Commençons par mon code :

$sql = ("SELECT * FROM publications ORDER BY $ordre DESC LIMIT 0,20");
$req = mysql_query($sql);

while($data = mysql_fetch_array($req))
{
des trucs
}

Mon soucis : ceci sert à trier les publications par catégorie que l'on choisit avant et qui se mettent dans $ordre.

Le problème est que si j'ai une catégorie qui n'a aucune publication dedans, il y a cette erreur là :

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/the-secret/www/actus.php


Ce que je voudrais, c'est un code qui, quand il n'y a pas de publications, affiche un message. Mais il n'y a pas de "else" à un while. Comment faire ?

Merci.

1 réponse

GrifOli Messages postés 2111 Date d'inscription   Statut Membre Dernière intervention   591
 
Bonjour,

Je ferais quelque chose comme suit:


<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=TA_DB', 'USER', 'MDP');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}


$count_categorie = 0;

$stmt= $bdd->query("SELECT * FROM publications ORDER BY '.$ordre.' DESC LIMIT 0,20");
while($data= $stmt->fetch()) {

++$count_categorie
des trucs

}
$stmt->closeCursor();

if ($count_categorie == 0) {
echo "Il n'y a pas de catégorie.";
}
?>
0
Utilisateur anonyme
 
Je comprends pas la moitié du code...
0
GrifOli Messages postés 2111 Date d'inscription   Statut Membre Dernière intervention   591
 
Ok désolé, je t'explique:

try
{
$bdd = new PDO('mysql:host=localhost;dbname=TA_DB', 'USER', 'MDP');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
C'est pour accéder à ta base de données. Tu remplaces TA_DB par le nom de ta base de données, user par le nom d'utilisateur et mdp par ton mot de passe.


$count_categorie = 0;
J'attribue la valeur 0 à une variable.


$stmt= $bdd->query("SELECT * FROM publications ORDER BY '.$ordre.' DESC LIMIT 0,20");
Je fais la requête à ta base de donnée comme tu as fait dans ton code.


while($data = $stmt->fetch()) {

++$count_categorie
des trucs

}
$stmt->closeCursor();
Tant qu'il y a des données à afficher, on fait des trucs, et j'augmente à chaque fois la valeur de la variable $count_categorie par 1. Je libère ensuite la connexion au serveur avec closeCursor();
Note: je viens de déplacer l'endroit où j'avais mis $stmt->closeCursor(); dans le code, il est bien à l'extérieur de la fermeture de l'accolade.


if ($count_categorie == 0) {
echo "Il n'y a pas de catégorie.";
}
Si la variable $count_categorie est égale à 0 (donc, s'il n'y a pas eu de catégories affichées), j'affiche un message qui dit "Il n'y a pas de catégorie".
0
Utilisateur anonyme
 
Maintenant j'ai deux erreurs ><

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given

Fatal error: Call to a member function closeCursor() on a non-object
0
GrifOli Messages postés 2111 Date d'inscription   Statut Membre Dernière intervention   591
 
L'erreur mysql_fetch_array() est une erreur de syntaxe dans ton code. Personnellement, je n'utilise pas cette fonction, alors je ne peux corriger ton erreur. Par contre, le code que je t'ai présenté fait exactement ce que tu désires.

La seconde erreur est probablement dû au fait que tu as conservé ton code initial et tu as rajouté le mien. Ma variable $stmt est donc inconnue et closeCursor() te donne une erreur.
0
Utilisateur anonyme
 

Finalement j'ai trouvé ^^
Merci.

0