fonction en PHP

  • Auteur de la discussion Auteur de la discussion sim100
  • Date de début Date de début
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
 
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
 
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 @.
 
$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 ?
 
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 :)
 
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
 
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