connexion BD, avis sur deux fonctions
Bonjour à tous,
Je suis débutant en programmation et je souhaiterais avoir votre avis sur deux fonctions que j'ai faite.
J'ai fait une fonction Requete SQL avec un try catch si il y a une erreur et je la rappelle dans mes fonction pour afficher des données.
Ma question est la suivante, le passage par ma boucle while est-il obligé (copie des données dans un tableau), ne peut-on pas faire simplement $listePays = $resultat pour tout copier!
J'ai commenté ma question lignes 27-28!
Merci beaucoup c'est très gentil!
Bonne journée
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
$listePaysOrderByPopDeuxMio = afficheTabHabitantsDeuxMio($bd);
foreach($listePaysOrderByPopDeuxMio as $ligne){
echo $ligne['Pays'].' '.$ligne['an_2002'].'<br />';
}
// --------------------------------------- function -----------------------------------------------------------------------
function requeteSQL($paramBdPDO, $paramRequete){
try{
$reponse = $paramBdPDO->query($paramRequete);
}
catch (Exception $e)
{
exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
}
return $reponse;
}
function affichePaysOrdreAlph($paramBdPDO){
$sql = 'SELECT * FROM population ORDER BY pays';
$resultats = requeteSQL($paramBdPDO, $sql);
$listePays = array();
// le while est-il utili ici? Pour moi requete retourne un tableau
// donc on pourrait le retourner tel quel, mais sa ne marche pas si je ferme le cusor
while($ligneDonnes = $resultats->fetch()){
array_push($listePays, $ligneDonnes);
}
$resultats->closeCursor();
return $listePays;
}
/** Les pays sont répartis entre 4 tableaux en fonction de la population en 2002 :
* <1 mio habitants, entre 1 et 10 mio, entre 10 et 100 mio, >1 mio habitants.
*/
function afficheTabHabitants($paramBdPDO){
$sql = 'SELECT * FROM population WHERE an_2002 < 1000';
$resultats = requeteSQL($paramBdPDO, $sql);
$listePays = array();
while($ligneDonnes = $resultats->fetch()){
array_push($listePays, $ligneDonnes);
}
$resultats->closeCursor();
return $listePays;
}
function afficheTabHabitantsDeuxMio($paramBdPDO){
$sql = 'SELECT * FROM population WHERE an_2002 > 1000';
$resultats = requeteSQL($paramBdPDO, $sql);
$listePays = array();
while($ligneDonnes = $resultats->fetch()){
array_push($listePays, $ligneDonnes);
}
$resultats->closeCursor();
return $listePays;
} |
merci, j'ai regardé la doc
Bonjour,
Merci beaucoup pour ton conseil c'est super! J'ai regardé la doc et je pense qu'on peut demander à PDO de soulever une exception.
- j'utilise queryAll pour avoir tout le tableau
- je demande d'afficher les exception
- Dois-je fermer le curseur?
Merci beaucoup c'est vraiment sympa!
Bonne journée
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
// accès sur local
$hostname = "localhost";
$username = "root";
$password = "root";
$dbname = "revisionsPHP";
// afficher les personnes avec lien mailto
try{
$bd = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
/**
* set attribute permet d'indiquer à PDO qu'on ne veut pas des erreurs silencieuses
*/
$bd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(Exception $e)
{
exit('connexion à la bd à échouer :<br />'. $e->getMessage());
}
// --------------------------------------- functions -----------------------------------------------------------------------
function requeteSQL(PDO $paramBdPDO, $paramRequete){
try{
$reponse = $paramBdPDO::fetchAll($paramRequete);
}
catch (Exception $e)
{
exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
}
return $reponse;
}
function fonctionCorrige(PDO $paramBdPDO){
$sql = 'SELECT * FROM population WHERE an_2002 > 1000';
$resultats = requeteSQL($paramBdPDO, $sql);
return $resultats;
} |