Mysql_fetch_array() problème si vide

Résolu/Fermé
Utilisateur anonyme - 21 déc. 2013 à 21:41
 Utilisateur anonyme - 22 déc. 2013 à 08:34
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 samedi 28 juin 2008 Statut Membre Dernière intervention 26 mars 2020 591
Modifié par GrifOli le 21/12/2013 à 22:16
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
21 déc. 2013 à 22:09
Je comprends pas la moitié du code...
0
GrifOli Messages postés 2111 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 26 mars 2020 591
Modifié par GrifOli le 21/12/2013 à 22:21
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
21 déc. 2013 à 22:33
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 samedi 28 juin 2008 Statut Membre Dernière intervention 26 mars 2020 591
22 déc. 2013 à 03:21
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

Finalement j'ai trouvé ^^
Merci.

0