Problème rowCount () et fetch() ...

Résolu/Fermé
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 - Modifié le 11 mai 2018 à 14:16
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 - 11 mai 2018 à 17:02
Bonjour,

J'ai eu un problème avec mon raspberry qui me sert de serveur WEB, J'ai du ré-installer l'os (Rasbian Jessie)

Donc j'ai installer, apache2 php5 mysql phpmyadmin..

Depuis que mon site est sur le nouveau serveur j'ai des erreurs sur toutes les pages ou presque ...

EXEMPLE:


LE CODE :
<?php
include 'bdd.php';
 
$videosParPage = 9;
$videosTotalesReq = $bdd->query('SELECT id FROM courspro');
$videosTotales = $videosTotalesReq->rowCount();
$pagesTotales = ceil($videosTotales/$videosParPage);
if(isset($_GET['page']) AND !empty($_GET['page']) AND $_GET['page'] > 0 AND $_GET['page'] <= $pagesTotales) {
   $_GET['page'] = intval($_GET['page']);
   $pageCourante = $_GET['page'];
} else {
   $pageCourante = 1;
}
$depart = ($pageCourante-1)*$videosParPage;
 
?>


EDIT : Ajout des balises de code (jordane)

J'ai pas mit tout le HTML mais voila l'erreur et a la ligne 6, au sujet du rowCount (Chose qui marcher parfaitement sur l'ancien serveur...)

J'ai la même erreurs sur tout les pages, mais aussi sur des fetch()
Cela viens surement du changement de serveur ...
Dés idées merci !?

Cordialement, Roche Corentin

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 11 mai 2018 à 14:20
Bonjour,

1 - Pour poster du code sur le forum : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code


2 - Comme indiqué dans la documentation officielle de php .. ne pas utiliser rowCount sur des requêtes SELECT
A la place :
$sql = 'SELECT id FROM courspro';
try{ 
  $prep =  $bdd->prepare($sql);
   $prep->execute();
}catch(Exception $e){
  die ('Erreur : '. $e->getMessage();
}

//on stocke le resultat de la requete dans un array
$videosTotalesReq = $prep->fetchAll();

//on compte :
$videosTotales = count($videosTotalesReq);




0
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
11 mai 2018 à 14:41
Merci de ta réponse !

Je comprend le changement du code. Ce qui me pose souci c'est que cela fonctionner super bien avant, ( sur mon ancien serveur mais plus maintenant... ) Et surtout j'utilise cette façons de faire sur beaucoup de page ...

Merci
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
11 mai 2018 à 14:52
Comme indiqué dans la documentation

Si la dernière requête SQL exécutée par l'objet PDOStatement associé est une requête de type SELECT, quelques bases de données retourneront le nombre de lignes retournées par cette requête. Néanmoins, ce comportement n'est pas garanti pour toutes les bases de données

Donc...... tout est dit.... ça peut fonctionner... ou pas.
Et donc pour éviter tout souci, on utilisera le code que je t'ai donné avant.

Ou, si tu n'as pas besoin de boucler sur le résultat de la requête pour l'afficher (ou t'en servir ailleurs...), le code suivant serait même encore plus performant (si tu n'as vraiment besoin que de compter et rien d'autre)
$sql = 'SELECT count(id) as  NB FROM courspro';
try{ 
  $prep =  $bdd->prepare($sql);
   $prep->execute();
}catch(Exception $e){
  die ('Erreur : '. $e->getMessage();
}

//on stocke le resultat de la requete dans un array
$videosTotales = $prep->fetchColumn();


NB: De plus, pour pouvoir correctement gérer les éventuelles erreurs de requêtes, il faut utiliser des blocs try/catch (et avoir activé la gestion des erreurs pdo dans la connexion).
Voir ici les explications : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
0
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
Modifié le 11 mai 2018 à 16:05
Merci de ta réponse !
Comment puis-je procéder ?

En gros: j'ai une basse de donnée qui me permet de crée des "cours" puis j'ai fait une boucle qui récupéré chaque ligne de cette table pour les afficher.

En plus de tous sa j'avais trouver sur internet un code qui permet d'afficher qu'un certain nombre de cours (ici 9) puis avec un bouton afficher plus on affiche le reste des cours, mais sa si je le perd c'est pas grave ..

voici le code complet :
<?php
include 'bdd.php';

$videosParPage = 9;
$videosTotalesReq = $bdd->query('SELECT id FROM coursnovice');
$videosTotales = $videosTotalesReq->rowCount();
$pagesTotales = ceil($videosTotales/$videosParPage);
if(isset($_GET['page']) AND !empty($_GET['page']) AND $_GET['page'] > 0 AND $_GET['page'] <= $pagesTotales) {
$_GET['page'] = intval($_GET['page']);
$pageCourante = $_GET['page'];
} else {
$pageCourante = 1;
}
$depart = ($pageCourante-1)*$videosParPage;

?>
<!DOCTYPE HTML>
<html>
<head>
<title>Vulg'info - Novice</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script src="assets/js/ie/html5shiv.js"></script>
<link rel="stylesheet" href="assets/css/main.css" />
<link rel="stylesheet" href="assets/css/ie8.css" />
<link rel="shortcut icon" href="images/logo.png">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body class="no-sidebar">
<div id="page-wrapper">
<div id="header-wrapper">
<div id="header">
<?php
include 'banner.php';
include 'menu-vulgarisation.php';
?>
</div>
</div>
<div id="main-wrapper">
<div class="container">
<div class="row">
<div class="12u">
<section>
<header class="major">
<h2>La vulgarisation informatique | Novice</h2>
<p>Tout les cours, sur le niveau de basse de l'informatique</p>
</header>
<div id="toutes-les-videos">
<div class="row">
<?php
$coursnovice = $bdd->query('SELECT * FROM coursnovice LIMIT '.$depart.','.$videosParPage);
while($donneescoursnovice = $coursnovice->fetch()) {
?>
<div class="4u 12u(mobile) video">
<div class="box">
<a class="image featured"><img src="images/<?php echo $donneescoursnovice['images'] ?>" alt="" /></a>
<header>
<h3><?php echo $donneescoursnovice['titre'] ?></h3>
</header>
<p><?php echo $donneescoursnovice['description'] ?></p>
<footer>
<form method="POST" action="cours-novice/<?php echo $donneescoursnovice['lien'] ?>.php">
<input type="hidden" name="varid" value="<?php echo $donneescoursnovice['id'] ?>"></input>
<input class="button alt" type="submit" value="Suivre ce cours" />
</form>
</footer>
</div>
</div>
<?php
}
?>
</div>
</div>
</section>
<center>
<div id="pagination" style="text-align: center;">
<br><br><br><br>
<?php
for($i=1;$i<=$pagesTotales;$i++) {
if($i == $pageCourante) {
?>
<p><?php echo $i.' '; ?></p>
<?php
} elseif ($i == $pageCourante+1) {
echo '<a href="vulgarisation-novice.php?page='.$i.'" class="suivant">'.$i.'</a> ';
} else {
?>
<p><?php echo '<a href="vulgarisation-novice.php?page='.$i.'">'.$i.'</a> '; ?></p>
<?php
}
}
?>
</div>
</center>
</div>
</div>
</div>
</div>
</div>
<?php
include 'footer.php';
?>
<script src="assets/js/jquery-ias.min.js"></script>
<script>
var ias = jQuery.ias({
container: '#toutes-les-videos',
item: '.video',
pagination: '#pagination',
next: '.suivant'
});
ias.extension(new IASSpinnerExtension({
src: 'assets/js/loader.gif'
}));
ias.extension(new IASNoneLeftExtension({
text: '<h3 style="color:#d52349;">Tous les cours ont été affichés !</h3>'
}));
ias.extension(new IASTriggerExtension({
text: '<a class="button icon fa-file-text">Charger plus de cours</a>'
}));
</script>
</body>
</html>
0
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
11 mai 2018 à 17:02
Bon je suis arriver a régler le problème ! un peux bizarrement mais bon sa marche,
En gros l'utilisateur que j'utiliser pour se connecter a la BDD avais pas assez de droit, ducoup je me suis mit en root et la tout fonctionne !
0