Bonjour,
Je suis actuellement le tuto sur PHP et je rencontre quelques soucis.
J'essaie de gérer certaines erreurs.
La première requête marche nickel , sauf que si je mets d'autres erreurs dans les autres requêtes , rien ne s'affiche ..
Voici le 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 64
| <?php
/* PDO est une extension orienté objet, donc ci $bdd est un objet représentant la connexion. La connexion n'a besoin d'être faite qu'une seule fois
mysql correspond au data source name (DNS) . */
try
{
$bdd=new PDO('mysql:host=localhost;dbname=test','uroot','');
}
/* En cas d'erreur, PDO renvoie une exception permettant de capturer l'erreur ( sinon cela affiche publiquement le mdp ou autres en cas d'erreur ( toute la ligne ) */
catch(Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
?>
<?php
$nom='PATRICK';
/* query signifie requête en anglais. $req contient maintenant toutes les infos MySql en vrac */
/* ci-dessous n'est pas à faire -> risque d'injection SQL */
$req=$bdd->query('Select nom,possesseur from jeux_video where upper(possesseur)=\'' . $nom . '\' order by 1 limit 5,5;') or exit(print_r($bdd->errorInfo()));
/*limit: premiere param : a partir de quel ligne , deuxieme param : le nombre de ligne */
/* fetch signifie va chercher. donnees est maintenant un array contenant champ par champ les valeurs de la première entrée */
/* $donnes=$req->fetch(); Nous renvoie la première ligne.
Il faut faire une boucle , et tant que l'on repète fetch ,fetch va chercher dans $req l'entrée suivante et organiser
champs dans l'array $donnees */
while($donnees=$req->fetch()) /* le fetch recupere une nouvelle entrée et place son contenu dans $donnees. Aussi elle vérifie si $donnees vaut vrai ou faux .fetch renvoie faux dans $donnees lorsqu'il arrive à la fin des données */
{
?>
<p>
<strong>Jeu : </strong> <?php echo $donnees['nom']; ?>
. Il appartient a <em> <?php echo $donnees['possesseur']; ?> </em></p>
<?php }
$req->closeCursor(); /* on signal qu'on a terminé le travail sur la requête */
?>
<?php
echo '----------- Requete prepare --------<br/><br/>';
$newReq=$bdd->prepare('Select * from jeux_video where id < ? and prix > ? ') or exit(print_r($bdd->errorInfo()));
$newReq->execute(array($_GET['id'],$_GET['prix']));
while($donnees=$newReq->fetch())
{
echo '<li>' . $donnees['nom'] . ' au prix de ' . $donnees['prix'] . ' euros.</li>';
}
$newReq->closeCursor();
?>
<?php
echo '<br/><br/>----------- Requete nominatif --------<br/><br/>';
$secondReq=$bdd->prepare('Select * from jeux_video where nbre_joueurs_max = :nbrmax and prix < :prixmax') or exit(print_r($bdd->errorInfo()));
$secondReq->execute(array('nbrmax' => $_GET['maxJ'], 'prixmax' => $_GET['maxP']));
while($newDonnees=$secondReq->fetch())
{
echo '<li>' . $newDonnees['nom'] . '<br/>';
}
$secondReq->closeCurseur();
?> |
J'ai déjà essayé les try/catch , mais sans succès.
PS : Quand je dis erreur , c'est par exemple mettre jeuuuu_video à la place de jeux_video
Merci d'avance
Edit :
Résolu en mettant pour les requêtes préparés
or exit(print_r($newReq->errorInfo()) dans le execute
Cependant, j'aurai aimé savoir pourquoi dans ma requête simple du début :
$req=$bdd->query('Select nom,possesseur from jeux_video where upper(possesseur)=\'' . $nom . '\' order by 1 limit 5,5;') or exit(print_r($bdd->errorInfo()));
Je suis obligé de mettre $bdd pour afficher l'erreur et non pas $nomRequete comme dans les requêtes préparés ?
Partager