fonction en PHP

  • Auteur de la discussion Auteur de la discussion sim100
  • Date de début Date de début
WRInaute passionné
Bonjour
J'ai une erreur sur cette fonction

Code:
function aff_photos($cont)
	{
	$query="SELECT photo_small, title FROM wpa_photo WHERE valide=1 and photo_small LIKE '%/$cont/%' ORDER BY date_ins DESC, heure_ins DESC LIMIT 2";
	$res_photo=@mysql_query($query,$db);
	$nbr_photo=mysql_num_rows($res_photo);
	for ($i=0; $i<$nbr_photo; $i++)
		{
		$list_photo=@mysql_fetch_row($res_photo);
		$photos.="<div align='center'><a href='$list_aff_photo[4]' target='_blank'><img src='$list_photo[0]' border='0' alt=\"$list_photo[1]\"></a><br><br></div>";
		}
	return $photos;
	}
$cont="southeast-asia";
echo aff_photos($cont);

Ca me retourne l'erreur
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/local/apache/htdocs/sites/t/the-world-in-photos.com/index.php on line 54

Je ne comprends pas pourquoi!!!
Pourtant ma connection à la bdd et le code marche si ce n'est pas une fonction.

Quelqu'un voit le problème?

Merci
 
WRInaute passionné
si

Si elle l'est
Le programme est plus long que ça, les paramètres d'accès à la base de donnée sont initialisé au début
 
WRInaute accro
Re: si

sim100 a dit:
Si elle l'est
Le programme est plus long que ça, les paramètres d'accès à la base de donnée sont initialisé au début

Au début, certes, mais en dehors de la fonction. Donc, dans la fonction, c'est bien une variable locale non initialisée.

Et +1 pour la remarque de e-kiwi sur le @.
 
WRInaute occasionnel
$res_photo=@mysql_query($query,$db);

J'savais pas qu'on pouvais mettre la base apres la requete... (si $db est la base bien sur)

donc ca evite de faire un mysql_select_de avant ?
 
WRInaute passionné
e-kiwi a dit:
d'où l'interet de ne pas masquer les messages d'erreurs de mysql_query ^^

c'est là qu'on reconnait le bon programmeur, celui qui a plus l'habitude de masquer ses erreurs que de les corriger :)
 
WRInaute impliqué
e-kiwi a dit:
d'où l'interet de ne pas masquer les messages d'erreurs de mysql_query ^^

Ou mieux, masquer les erreurs avec @ car en production c'est pas top et utiliser une fonction qui va logguer les erreurs.

Code:
if( ! @mysql_query( $sql ) ) {
    if( defined( 'LOG_ERROR' ) && LOG_ERROR ) {
      log( MYSQL_ERROR, $sql."\n".mysql_error() );
    }
}

avec la fonction log qui enregistre dans un fichier texte sur lequel ou fait un tail -f pour voir les logs en temps réel.

Avantage :
- on n'a pas à aller modifier toutes les fonctions susceptibles de générer une erreur avant le passage en prod, il suffit d'ajuster la constante adéquate.
- on dispose d'un système de suivi des erreurs même en période de production
 
WRInaute accro
en fait moi j'ai remplacé la fonction mysql_query() par une fonction requete() qui se connecte à la bdd, execute la requete et gere les erreurs, puis referme la connexion, comme ca c'est plus optimisé, et ca gere un journal d erreur sans avoir à le gerer à chaque requete dans le code
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut