Mysql_fetch_array() problème si vide

Résolu
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

  1. 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.";
    }
    ?>
    1. Je comprends pas la moitié du code...
    2. 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".
    3. 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
    4. 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.
    5. Finalement j'ai trouvé ^^
      Merci.