Guten Tag, ich habe versucht, ein Problem in meinem Code zu finden. Ich verwende SQL_CALC_FOUND_ROWS und FOUND_ROWS(), um die Gesamtmenge der Datensätze in meiner Datenbank (mit PDO) abzurufen. Mein Problem ist, dass FOUND_ROWS() immer 0 zurückgibt.PDO PHP & MySQL FOUND_ROWS() gibt immer 0
Die Sache ist, dass ich es vorher funktionierte, aber ich machte einige Anpassungen hier und dort und jetzt hörte es auf zu arbeiten. Ich kann nicht für die Liebe von mir erinnern, was ich hätte löschen können, das war wichtig und kann nicht scheinen, irgendeine gute Dokumentation zu finden, die diese Funktionen mit PDO verwendet.
Bis jetzt habe ich versucht, es in verschiedene Schleifen, versuchte fetch() mit verschiedenen Modi versucht, versucht, die Befehle in unterschiedlicher Reihenfolge (d. H. Vor der Weile und nach der While-Schleife usw.). Ich denke, ich verpasse hier einfach etwas sehr Einfaches, aber ich habe dieses Ding seit ungefähr 1 oder 2 Stunden angeguckt und es macht mich verrückt.
hier ist also mein Code:
public function findBerichten($args)
{
//$offset zorg ervoor dat pagina 1 als record 0 in de database zoekt
$offset = ($args['huidigePagina'] - 1) * $args['itemsPerPagina'];
$sth = $this->db->DBH()->prepare("SELECT SQL_CALC_FOUND_ROWS
berichten.berichtID,
berichten.bericht,
berichten.naam,
berichten.mail
FROM `berichten`
ORDER BY berichten.datumToegevoegd DESC
LIMIT ?, ?");
$sth->bindParam(1, $offset, PDO::PARAM_INT);
$sth->bindParam(2, $args['itemsPerPagina'], PDO::PARAM_INT);
$sth->execute();
$sth->setFetchMode(PDO::FETCH_ASSOC);
$berichten = array();
while($row = $sth->fetch())
{
$bericht = new Bericht();
$bericht->setBerichtID(htmlentities(strip_tags($row['berichtID'])));
$bericht->setBericht(htmlentities(strip_tags($row['bericht'])));
$bericht->setNaam(htmlentities(strip_tags($row['naam'])));
$bericht->setMail(htmlentities(strip_tags($row['mail'])));
$berichten[] = $bericht;
}
$sth = $this->db->DBH()->prepare("SELECT FOUND_ROWS() as aantalBerichten");
$sth->execute();
$sth->setFetchMode(PDO::FETCH_ASSOC);
$this->aantalBerichten = $sth->fetch();
var_dump($this->aantalBerichten);
return $berichten;
}
index.php
if($huidigePagina < 1)
{
//$huidigePagina is 1
$huidigePagina = 1;
}
//Als de huidige pagina groter is als het totaal aantal pagina's
if($huidigePagina > $totaalPaginas)
{
//$huidigePagina is gelijk aan het totaal aantal pagina's
$huidigePagina = $totaalPaginas;
}
$berichtDAO->findBerichten(array('huidigePagina'=>$huidigePagina, 'itemsPerPagina'=>10))
Ausgang Var_dump: array(1) { ["aantalBerichten"]=> string(1) "0" }
Wenn Sie schon eine Idee, die bekam lassen Sie mich wissen, weil ich bereit bin versuchen Sie gerade über alles gerade jetzt :)
Hier ist zu hoffen, dass diese Frage nicht zu noob ist! Wie gesagt, ich vermisse hier etwas sehr leichtes.
bearbeiten
die execute() Funktion korrekt usw. ist, wenn Code if() Aussage noch
auch zur Ausführung schreitet verwendet in; Im 90% sicher, dass dies mit dem FOUND_ROWS() Teil des Codes zu tun hat.
bearbeiten 2, enthalten db Klasse und Bericht() Klasse
Bericht Klasse:
<?php
Class Bericht
{
private $db;
private $berichtID;
private $bericht;
private $naam;
private $mail;
public function __construct(Db $db)
{
$this->db = $db;
}
public function setBerichtID($berichtID)
{
$this->berichtID = $berichtID;
}
public function getBerichtID()
{
return $this->berichtID;
}
public function setBericht($bericht)
{
$this->bericht = $bericht;
}
public function getBericht()
{
return $this->bericht;
}
public function setNaam($naam)
{
$this->naam = $naam;
}
public function getNaam()
{
return $this->naam;
}
public function setMail($mail)
{
$this->mail = $mail;
}
public function getMail()
{
return $this->mail;
}
}
db Klasse:
<?php
class Db
{
//bij het laden van Db
public function __construct()
{
//voer functie connect() uit
$this->connect();
}
//functie voor het verbinding maken met en het selecteren van een database
private function connect()
{
//$connection is connectie naar mysql database (met de opgegeven inlog waardes)
$connection = mysql_connect('localhost', 'user', 'pw');
//als er geen connectie gemaakt kan worden
if(!$connection)
{
//die (voer overige code niet meer uit) en echo string + de mysql error
die("Kan geen verbinding maken: " . mysql_error());
}
//selecteert de opgegeven database met de connectie ($connection)
mysql_select_db("db", $connection);
}
public function DBH()
{
try
{
$DBH = new PDO('mysql:host=localhost;dbname=db', 'user', 'pw');
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $DBH;
}
catch (PDOException $except)
{
echo $except->getMessage();
}
}
//function to retrieve records -- not important
public function getRecords($sth)
{
$rows = array();
if($sth->execute() == true)
{
$sth->setFetchMode(PDO::FETCH_OBJ);
while($row = $sth->fetch())
{
$rows[] = $row;
}
return $rows;
}
else
{
return false;
}
}
}
Von Interesse - macht das Konstrukt für die Bericht-Klasse irgendwelche SQL-Abfragen? – ChrisK
@ChrisK Nein, es enthält nicht alle Bericht-Klasse sind Setter & Getter – Bono
Erhalten Sie irgendwelche Fehler? Oder ist es nur 0? Haben Sie versucht, die Recordsets mit 'nextRowset()' zu durchlaufen? –