FONCTION LISTANT UNE REQUÊTE SQL

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 2 janv. 2006 à 14:21
TyFFoul Messages postés 6 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 23 septembre 2006 - 2 janv. 2006 à 16:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35363-fonction-listant-une-requete-sql

TyFFoul Messages postés 6 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 23 septembre 2006
2 janv. 2006 à 16:47
oui excuse-moi j'ai inversé ;)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 janv. 2006 à 16:43
TyFFoul moi c'est coucou747 pas 474
ranouf Messages postés 237 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 31 août 2009
2 janv. 2006 à 16:26
C'est un truc que j'utilise jamais ça les try catch ! mais je conserve ça peut etre utile !

merci
TyFFoul Messages postés 6 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 23 septembre 2006
2 janv. 2006 à 16:18
ok merci coucou474!
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
2 janv. 2006 à 16:03
Disons que le "OR ..." permet de tout avoir sur une ligne.

Pour Coucou : TH signifie bien Table Header :)
Encore Coucou : Plus besoin de faire list($x, $y) explode(' ', microtime());
> microtime(true); // Tout simplement :)


Autrement, pour gérer les erreurs, tu peux utiliser les exceptions => throw new Exception('Message d\'erreur');

Et pour pouvoir les utiliser convenablement :
try {
afficherRequete2($req);
} catch (Exception $e) {
echo 'Erreur détectée : '.$e->getmessage();
}

C'est bien plus facile à utiliser plutot que de faire un renvoi de TRUE/FALSE pour une detection d'erreur (sauf si la fonction est simpliste).

Mais bon, c'est au choix :)
ranouf Messages postés 237 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 31 août 2009
2 janv. 2006 à 15:57
je récupère le timer, je le mets pas dedans mais ça pourra être utile aux prochains visiteurs :) et accessoirement pour moi aussi !
ranouf Messages postés 237 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 31 août 2009
2 janv. 2006 à 15:57
je récupère le timer, je le mets pas dedans mais ça pourra être utile aux prochains visiteurs :) et accessoirement pour moi aussi !
ranouf Messages postés 237 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 31 août 2009
2 janv. 2006 à 15:53
Par rapport à ceci:

# $rst = mysql_query($sql);
# if (!$rst){
# echo "Erreur :" . mysql_error() . "
";
tu devrais utiliser or die... ou or {echo mysql_error();return false; }

au final ça change rien, je test si la requete a échoué ou pas
si (requete échouée) alors
j'affiche le message d'erreur

sinon
je l'affiche

finsi

le or die est pratique c'est ce que j'utilise jusqu'a ce que j'apprenne ceci :)

@+ et merci pour votre aide
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 janv. 2006 à 15:52
<th> = table header (je crois) ça te permet de mettre dans le css :

th{
/*mon table header*/
}

et c'est par défaut centré et en gras...

Bon, sinon, un vulgaire bench pour le temps de requette sql...

list($usec, $sec) = explode(' ', microtime());
$start=$sec+$usec;
mysql_query($req) or die(mysql_error());
list($usec, $sec) = explode(' ', microtime());
$time=(int)(($sec+$usec-$start)*100000);
$time=(float)$time/100;

$time est en milisecondes...
ranouf Messages postés 237 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 31 août 2009
2 janv. 2006 à 15:42
Ok je v modif ça, merci pour l'info.
TyFFoul Messages postés 6 Date d'inscription mardi 31 août 2004 Statut Membre Dernière intervention 23 septembre 2006
2 janv. 2006 à 15:39
Oui c'est plus rapide mais la syntaxe est différente selon ' ou " :
<?php
$nom=toto;

echo"Salut $nom !!";
/*ou avec les '*/
echo'Salut '.$nom.' !!';
?>

Pour coucou747 :
Comment fais-tu pour renvoyer le temps d'exécution de la requête sql??
Quelle est la différence entre <th> et <td>??
ranouf Messages postés 237 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 31 août 2009
2 janv. 2006 à 15:25
il vaut mieux utiliser echo 'salut'; que echo "salut"; ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 janv. 2006 à 15:15
je crois que tout ce que j'ai dit était essentiel...

ton commentaire qui ne corespond pas à ce que tu fais... comment tu veux qu'on s'y retrouve ensuite...

les or die sont très importants car tu peux grace à ça voir ce qui se passe dans ton code...

les return... en php, procedure n'existe pas, mais si tu peux avoir une erreur, alors renvoi false en cas d'erreur et true en cas de succès... de plus, ici, tu pourrais renvoyer plusieurs choses : temps, nombre d'enregistrements...

Bon, pour les guillemets, ça montre ta confusion dans l'utilisation des " et des ' : tu les utilise de la même façon alors qu'elles n'ont pas les mêmes propriétées... les ' sont plus rapides et on n'échape pas les variables dans les "...
ranouf Messages postés 237 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 31 août 2009
2 janv. 2006 à 14:53
Merci pour ton aide, j'ai fait les modifications, j'ai pas tout pris en compte mais juste ce qui etait essentiel.

@+
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
2 janv. 2006 à 14:21
# //--- On vérifie si y a plusieurs enregistrements
# if (mysql_num_rows($rst) > 0){

plusieurs veut dire au moins deux...

# $rst = mysql_query($sql);
# if (!$rst){
# echo "Erreur :" . mysql_error() . "
";
tu devrais utiliser or die... ou or {echo mysql_error();return false; }

pour les noms des colones, tu devrais utilsier th au lieu de td...

tu devrais utiliser les " à la place des '...

un return true à la fin serait un plus, et un return false en cas d'échec de requette... ou alors, tu pourrais retourner le temps de requette sql...

Reste le code html à modifier, des " pour les attributs, des
à la palce des
... utiliser des css pour width...

Bon, sinon, pourquoi pas, je noterais quand tu auras le temps de faire toutes les modifications, car la le code est relativement crade...