Mysql_fetch_array() problème si vide
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Commençons par mon code :
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.
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
-
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.";
}
?>-
-
Ok désolé, je t'explique:
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.
try
{
$bdd = new PDO('mysql:host=localhost;dbname=TA_DB', 'USER', 'MDP');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
J'attribue la valeur 0 à une variable.
$count_categorie = 0;
Je fais la requête à ta base de donnée comme tu as fait dans ton code.
$stmt= $bdd->query("SELECT * FROM publications ORDER BY '.$ordre.' DESC LIMIT 0,20");
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();
while($data = $stmt->fetch()) {
++$count_categorie
des trucs
}
$stmt->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.
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".
if ($count_categorie == 0) {
echo "Il n'y a pas de catégorie.";
} -
-
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. -
-